Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/150.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ OpenCV中的背景减法_C++_C_Opencv_Image Processing_Computer Vision - Fatal编程技术网

C++ OpenCV中的背景减法

C++ OpenCV中的背景减法,c++,c,opencv,image-processing,computer-vision,C++,C,Opencv,Image Processing,Computer Vision,我试图在OpenCV 2.4.10中使用mog2实现背景减法。我的目标是使用背景减法分割手。不幸的是,用作前景的第一帧在网络摄像头的实时捕获过程中似乎被卡住了。下面是我用于这个简单项目的代码 #include "stdafx.h" #include <opencv2\opencv.hpp> #include <opencv2\imgproc\imgproc.hpp> #include <opencv2\video\video.hpp> #include <

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

#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;
}  
#包括“stdafx.h”
#包括
#包括
#包括
#包括
#包括
#包括
#包括
使用名称空间cv;
int main()
{
垫框,面罩,灰色;
背景mog2 mog2;
视频捕获上限(0);
if(cap.isOpened()){
while(true)
{
如果(第二章(框架))
{
imshow(“框架”,框架);
CVT颜色(边框、灰色、cv::颜色_rgb2灰色);
imshow(“灰色”,灰色);
mog2(灰色,蒙版,0.0);//0.1是学习率
imshow(“背景减法”,掩码);
如果(等待键(30)>=0)
打破
}
}
}
释放帽();
返回0;
}  
这是输出


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


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

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


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

如果我可以删除第一帧,我相信在这种情况下效果会更好@Saransh很明显,您正在接受实时输入流。因此,不需要删除第一帧。只需确保前几帧中没有可移动的对象。如果我可以删除第一帧,我相信在这种情况下效果会更好@Saransh很明显,您正在接受实时输入流。因此,不需要删除第一帧。只需确保前几帧中没有可移动的对象。