8

我想使用 OpenCV 方法在视频文件中进行背景减法。现在我可以做背景减法,但问题是我无法在颜色模式下获得输出。减去背景后的所有输出都以灰度颜色模式出现:(。我想将颜色信息获取到前景,这是减去背景后的结果输出。

我可以使用掩蔽技术吗?就像我正在考虑的以下程序。

  1. 捕获输入 - InputFrame(RGB)
  2. 过程InputFrame
  3. 减去背景,将前景存储在TempFrame(以灰度形式出现:(
  4. 使用创建蒙版TempFrame
  5. 将创建的蒙版应用到InputFrame
  6. 获取彩色前景为OutFrame

我对使用 OpenCV 进行掩蔽感到很兴奋。我只是 OpenCV 的初学者。请帮助我克服这一点。

提前致谢。

4

2 回答 2

20

http://vimeo.com/27477093

代码在这里

http://code.google.com/p/derin-deli-mavi/downloads/detail?name=denemeOpenCv23.zip&can=2&q=

要达到彩色前景,只需使用前景蒙版复制图像

// image.copyTo(foreground,foreground);

于 2011-08-14T22:45:16.333 回答
11

好的,如果您使用背景减法,我不明白 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);
于 2010-01-17T11:02:51.893 回答