2010-01-08 78 views
7

我想使用OpenCV方法在视频文件中进行背景减法。现在我可以做背景减法,但问题是我无法在彩色模式下获得输出。减去背景后,所有的输出灰度色彩模式来:(,我想要得到的颜色信息,这是导致输出背景得到扣除后的前景。它采用屏蔽技术使用OpenCV进行背景减法效果

我该怎么办? ?像下面的程序,我正在考虑

  1. 捕捉输入 - InputFrame(RGB)
  2. 过程InputFrame
  3. 扣除背景,商店前景在TempFrame(在灰色到来规模:(
  4. 创建使用TempFrame
  5. 口罩创建的面膜适用于InputFrame
  6. 获得彩色前景为OutFrame

我打了做使用OpenCV的屏蔽。我只是OpenCV的初学者。请帮我解决这个问题。

在此先感谢。

回答

10

好吧,我不明白如果您使用背景减法TempFrame(您的前景)可能是灰度。您必须使用非常特殊的算法。但假设TempFrame是灰度,那么你应该这样做:

cv::Mat mask = tempFrame > 0.5; 

cv::Mat outFrame; 
capturedFrame.copyTo(outFrame, mask); 

这就是上面的OpenCV 2.0代码。数字0.5是一个阈值,您需要将其设置为适当的值。如果你不使用浮点图像,你可能会将它设置为128或类似的东西。这是OpenCV的1.1代码同样的事情:

CvMat* mask = cvCreateMat(tempFrame.rows, tempFrame.cols, CV_8UC1); 
cvCmpS(tempFrame, 0.5, mask); 

CvMat* outFrame = cvCreateMat(capturedFrame.rows, capturedFrames.cols, CV_32FC3); 
cvCopy(capturedFrame, outFrame, mask); 
+0

谢谢,但我仍然想知道为什么所有的例子和代码为BGS我遇到互联网产生只有灰度输出?无论如何..再次感谢。 – Jabez 2010-01-19 06:59:37

+0

哦好吧,我想这只是简单的做灰度背景减法,所以也许这就是原因。 – 2010-01-19 09:34:28