我对OpenCV 2.3.1
C++/CLI
提出了一个问题。我获取C++/CLI
的输出并将其显示为C#pictureBox
。
当我使用高斯背景减法来分析图像时,转换为cvMat
时的输出格式不是我所期望的。 BG减法帧是分开的&重复为3个会话。此外,它的。type()
和channels()
与原始框架
但是,当使用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);
}
答案 0 :(得分:0)
感谢您的关注。 最后,几天后,我弄清楚错误的原因:由于上面的背景扣除方法产生的格式不正确。
我的C#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);
}
希望如果有人面对同样的情况会有所帮助:)
干杯,