Неверный формат вывода при использовании фонового вычитания в OpenCV C ++ / CLI

У меня есть вопрос относительно 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);
}

0

Решение

Спасибо за ваши проблемы.
Наконец, через несколько дней я выясняю причину ошибок: из-за неправильного формата, созданного методами вычитания фона.

Мой 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);

}

Надеюсь, это поможет, если кто-нибудь столкнется с такой же ситуацией 🙂

Ура,

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]