使用OpenCV C ++ / CLI的背景减法输出格式错误

时间:2014-01-03 03:29:28

标签: c++ opencv background picturebox subtraction

我对OpenCV 2.3.1 C++/CLI提出了一个问题。我获取C++/CLI的输出并将其显示为C#pictureBox

当我使用高斯背景减法来分析图像时,转换为cvMat时的输出格式不是我所期望的。 BG减法帧是分开的&重复为3个会话。此外,它的。type()channels()与原始框架

不同

Wrong display

但是,当使用cvShowImage()(而不是C#图片框)显示帧序列时,它会正确显示。

以下是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);
}

1 个答案:

答案 0 :(得分:0)

感谢您的关注。 最后,几天后,我弄清楚错误的原因:由于上面的背景扣除方法产生的格式不正确。

我的C#pictureBox需要RGB,而不是GRAY。但是,在erodedilate之后,它会以某种方式将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);

}

希望如果有人面对同样的情况会有所帮助:)

干杯,