基于OpenCV的高效背景减法

基于OpenCV的高效背景减法,opencv,background-subtraction,Opencv,Background Subtraction,我想用OpenCV方法在视频文件中进行背景减法。现在我可以做背景减法,但问题是我不能在颜色模式下得到输出。减去背景后的所有输出都将以灰度颜色模式:()显示。我想获得前景的颜色信息,这是减去背景后的结果输出 我可以使用掩蔽技术吗?就像我正在考虑的下面的过程 捕获输入--InputFrame(RGB) 处理InputFrame 减去背景,将前景存储在TempFrame(灰度:() 使用TempFrame 将创建的掩码应用于InputFrame 将彩色前景设置为外帧 我很喜欢用OpenCV做掩蔽。我只

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

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

  • 捕获输入--
    InputFrame
    (RGB)
  • 处理
    InputFrame
  • 减去背景,将前景存储在
    TempFrame
    (灰度:(
  • 使用
    TempFrame
  • 将创建的掩码应用于
    InputFrame
  • 将彩色前景设置为外帧
  • 我很喜欢用OpenCV做掩蔽。我只是OpenCV的初学者。请帮助我克服这个问题


    提前谢谢。

    好的,如果你使用背景减法,我不明白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);
    

    代码在这里

    到达彩色前景 只需使用前景遮罩复制图像


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

    谢谢,但我仍然想知道为什么我在互联网上看到的所有BGS示例和代码都只生成灰度输出?无论如何……再次感谢。哦,好吧,我想用灰度做背景减法更容易,所以可能这就是原因。