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

0

У меня вопрос относительно OpenCV 2.3.1 с C++/CLI. Я беру вывод C++/CLI и отображаю его на С# pictureBox.

Когда я использую гауссовское вычитание фона для анализа изображения, формат вывода при преобразовании в cvMat не является тем, что я ожидал. Рамка вычитания BG разделяется и дублируется на 3 сеанса. Кроме того, его. type() и channels() отличается от необработанного кадра

Изображение 174551

Однако, когда последовательность кадров кадров с использованием 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);
}
Теги:
opencv
background
subtraction
picturebox

1 ответ

0
Лучший ответ

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

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

}

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

Ура,

Ещё вопросы

Сообщество Overcoder
Наверх
Меню