Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/143.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.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++ 如何从蒙版中获取减法视频_C++_Opencv_Video Processing_Javacv - Fatal编程技术网

C++ 如何从蒙版中获取减法视频

C++ 如何从蒙版中获取减法视频,c++,opencv,video-processing,javacv,C++,Opencv,Video Processing,Javacv,我想从网络摄像头视频中减去绿色背景。 贝娄展示了我是如何从网络摄像头中获取视频的 public static void main(String[] args) { CvCapture capture =cvCreateCameraCapture(CV_CAP_ANY); // IplImage frame; IplImage grayimg = cvCreateImage(cvSize(640,480),IPL_DEPTH_8U,1); cvNamedWi

我想从网络摄像头视频中减去绿色背景。 贝娄展示了我是如何从网络摄像头中获取视频的

public static void main(String[] args) {

    CvCapture capture =cvCreateCameraCapture(CV_CAP_ANY);  //
    IplImage frame;

    IplImage grayimg = cvCreateImage(cvSize(640,480),IPL_DEPTH_8U,1);

    cvNamedWindow("Video",CV_WINDOW_AUTOSIZE);

    for(;;)
    {
        frame = cvQueryFrame(capture);


        if(frame == null) 
            {
                System.out.println("ERROR: NO Video File"); 
                break;
            }

        cvShowImage("Video",hsvThreshold(frame));
        char c = (char) cvWaitKey(30);

        if(c==27) break;
    }

    cvReleaseCapture(capture);
    cvDestroyWindow("Video");
}
我的图像掩码正在重新执行
hsvThreshold(frame)
此函数的IplImage。此时原始帧是
frame

所以我想把面具取出来
hsvThreshold(frame)
是这样的

     public static IplImage hsvThreshold(IplImage orgImg) {
    // 8-bit, 3- color =(RGB)
    IplImage imgHSV = cvCreateImage(cvGetSize(orgImg), 8, 3);
    System.out.println(cvGetSize(orgImg));
    cvCvtColor(orgImg, imgHSV, CV_BGR2HSV);
    // 8-bit 1- color = monochrome
    IplImage imgThreshold = cvCreateImage(cvGetSize(orgImg), 8, 1);

    cvInRangeS(imgHSV, cvScalar(70, 50, 50, 0), cvScalar(150, 200, 200, 0), imgThreshold);
    cvReleaseImage(imgHSV);
    cvSmooth(imgThreshold, imgThreshold, CV_GAUSSIAN, 13);
    cvNot(imgThreshold,imgThreshold);
    return imgThreshold;
}

如果要复制图像而不复制遮罩中的像素,可以使用函数
cvCopy(origImage、destImage、mask)。有关更多信息,请参见此

<>我建议你切换到C++ API,它更容易理解,更不用担心释放图像和内存泄漏。 编辑:
也可以将一个图像复制到另一个图像上,而无需cvCopy。你可以在这篇文章中找到代码:

你的问题到底是什么?你收到错误信息了吗?遮罩是否与预期不符?我想找到一种从原始图像中减去遮罩的方法?掩码在imgThreshold中返回,原始图像为frameMy originalFrame,掩码类型为IplImage和originalFrame通道3和掩码通道1。因此cvcopy不工作。掩码应仅为1个通道和一个二进制图像。原始图像和目标图像的频道数量必须相同。您是否首先使用函数
cvCreateImage()
创建了Destinmage?是的。我想使用背景透明度获取结果图像…是否可能如果您想在另一个现有图像上使用遮罩复制一个图像,您可能必须使用
cvSetImageROI
设置ROI。在这里你可以找到文档:再次使用新的C++ API要简单得多。