У меня есть вопрос относительно OpenCV 2.3.1
с C++/CLI
, Я беру вывод C++/CLI
и отобразить его в C # pictureBox
,
Когда я использую вычитание гауссовского фона для анализа изображения, формат вывода при преобразовании в cvMat
это не то, что я ожидал. Рамка вычитания BG разделена & дублируется на 3 сеанса. Кроме того, его.type()
а также channels()
отличается от необработанного кадра
Однако при отображении последовательности кадров с помощью cvShowImage()
(вместо C # 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);
}
Спасибо за ваши проблемы.
Наконец, через несколько дней я выясняю причину ошибок: из-за неправильного формата, созданного методами вычитания фона.
Мой C # pictureBox ожидает RGB
не GRAY
, Однако после erode
а также dilate
, это каким-то образом сделать МИМГ 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);
}
Надеюсь, это поможет, если кто-нибудь столкнется с такой же ситуацией 🙂
Ура,
Других решений пока нет …