使用OpenCV进行有效的背景减法

Jab*_*bez 8 opencv background-subtraction

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

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

  1. 捕获输入 - InputFrame(RGB)
  2. 处理 InputFrame
  3. 减去背景,存储前景TempFrame(以灰度显示:()
  4. 使用创建掩码 TempFrame
  5. 将创建的蒙版应用于 InputFrame
  6. 获得彩色前景 OutFrame

我很惊讶使用OpenCV进行屏蔽.我只是OpenCV的初学者.请帮助我克服这一点.

提前致谢.

Bir*_*mcu 21

http://vimeo.com/27477093

代码在这里

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

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

// image.copyTo(前景,前景);


Ray*_*yat 11

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

cv::Mat mask = tempFrame > 0.5;

cv::Mat outFrame;
capturedFrame.copyTo(outFrame, mask);
Run Code Online (Sandbox Code Playgroud)

这是上面的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);
Run Code Online (Sandbox Code Playgroud)