【问题标题】:Background subtraction in OpenCVOpenCV中的背景减法
【发布时间】:2016-06-19 02:17:04
【问题描述】:

我正在尝试使用 mog2 在 OpenCV 2.4.10 中实现背景减法。我的目标是使用背景减法来分割手部。不幸的是,用作前景的第一帧似乎在从网络摄像头实时捕获期间卡住了。这是我用于这个简单项目的代码

#include "stdafx.h"
#include <opencv2\opencv.hpp>
#include <opencv2\imgproc\imgproc.hpp>
#include <opencv2\video\video.hpp>
#include <opencv2\core\core.hpp>
#include <iostream>
#include <sstream>
#include <string.h>
using namespace cv;
int main()
{
    Mat frame, mask, gray;

    BackgroundSubtractorMOG2 mog2;

    VideoCapture cap(0);

    if (cap.isOpened()){

        while (true)
        {


            if (cap.read(frame))
            {

                imshow("frame", frame);

                cvtColor(frame, gray, cv::COLOR_RGB2GRAY);
                imshow("gray", gray);
                mog2(gray, mask, 0.0);// 0.1 is learning rate
                imshow("Background Subtraction", mask);

                if (waitKey(30) >= 0)
                    break; 
            }
        }

    }
    cap.release();
    return 0;
}  

这是输出

【问题讨论】:

    标签: c++ c opencv image-processing computer-vision


    【解决方案1】:

    这是因为你的拳头恰好在第一帧,因此当你移动你的手时,你会得到两个不同的图像——一个来自手掌的新位置,另一个来自拳头的旧位置,现在被它背后的实际背景占据了。

    我建议你不要把手放在第一帧

    【讨论】:

    • 如果我可以删除第一帧是否有可能,我相信在这种情况下结果会很多。 @saransh
    • 很明显,您正在接受实时输入流。所以你不需要删除第一帧。只需确保前几帧中没有可移动的对象即可。
    猜你喜欢
    • 2011-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-03
    • 2011-12-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多