У меня вопрос относительно OpenCV 2.3.1
с C++/CLI
. Я беру вывод C++/CLI
и отображаю его на С# pictureBox
.
Когда я использую гауссовское вычитание фона для анализа изображения, формат вывода при преобразовании в cvMat
не является тем, что я ожидал. Рамка вычитания BG разделяется и дублируется на 3 сеанса. Кроме того, его. type()
и channels()
отличается от необработанного кадра
Однако, когда последовательность кадров кадров с использованием cvShowImage()
(вместо С# picturebox), она отображается правильно.
Вот код для Background subtraction
void NormalBGSubtraction_Adapter::BackgroundSubtraction(IplImage *proImg, IplImage* &maskImg)
{
Mat pImg(proImg);
Mat mImg;
bg.operator()(pImg, mImg);
erode(mImg, mImg, cv::Mat());
dilate(mImg, mImg, cv::Mat());
maskImg = cvCloneImage(&(IplImage)mImg);
}
Спасибо за ваши проблемы. Наконец, через несколько дней я выясняю причину ошибок: из-за неправильного формата, полученного выше методами вычитания фона.
Мой С# pictureBox ожидает RGB
, а не GRAY
. Однако, после erode
и dilate
, он каким-то образом превращает формат mImg в GRAY
.
Все, что я сделал, это просто переход к RGB
:
void NormalBGSubtraction_Adapter::BackgroundSubtraction(IplImage *proImg, IplImage* &maskImg)
{
Mat pImg(proImg);
Mat mImg;
bg.operator()(pImg, mImg);
/*
erode and dilate meaning : Removing noise
Isolation of individual elements and joining disparate elements in an image.
Finding of intensity bumps or holes in an image
*/
erode(mImg, mImg, cv::Mat());
dilate(mImg, mImg, cv::Mat());
cvtColor(mImg, mImg, CV_GRAY2RGB);
maskImg = cvCloneImage(&(IplImage)mImg);
}
Надеюсь, это поможет, если кто-то столкнется с такой же ситуацией :)
Ура,