Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/164.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';s image.empty()函数不工作_C++_Opencv_Image Processing_Video Capture_Opencv3.0 - Fatal编程技术网

C++ Opencv';s image.empty()函数不工作

C++ Opencv';s image.empty()函数不工作,c++,opencv,image-processing,video-capture,opencv3.0,C++,Opencv,Image Processing,Video Capture,Opencv3.0,在程序运行时卸下USB摄像头之前,以下代码工作正常。断开USB摄像头后,我看到一个空白图像,但程序应该停止,因为img\u cam1.empty()和!cap_cam1.isOpened()应为true。然而由于某些原因,两者都是错误的 这是什么原因造成的 VideoCapture cap_cam1(0); Mat img_cam1; while(true) { cap_cam1 >> img_cam1; if (img_cam1.empty() || !cap

在程序运行时卸下USB摄像头之前,以下代码工作正常。断开USB摄像头后,我看到一个空白图像,但程序应该停止,因为
img\u cam1.empty()
!cap_cam1.isOpened()
应为true。然而由于某些原因,两者都是错误的

这是什么原因造成的

VideoCapture cap_cam1(0);
Mat img_cam1;

while(true)
{

    cap_cam1 >> img_cam1;

    if (img_cam1.empty() || !cap_cam1.isOpened())
    {                               
        cap_cam1.release();  
         break;                 
    }

    else {        
        imshow("Live",img_cam1); 
        if (!img_cam1.isContinuous())
           break;
        img_cam1.empty();               
        img_cam1.release();

        if(waitKey(33)==27) break; 
    }
}
如何在卸下USB摄像头时停止程序?

来自(重点):

如果上一次调用VideoCapture构造函数或VideoCapture::open成功,则该方法返回true

在检查是否打开
cap_cam1
之前,您似乎需要先打电话。下面是这样的:

cap_cam1.open(1);
if (img_cam1.empty() || !cap_cam1.isOpened())
虽然我自己不知道确切的语法,但我能够显示解决问题所需的确切代码

关于
img\u cam1.empty()
的问题,我没有任何帮助,但是
empty()
上的引用:

如果Mat::total()为0或Mat::data为NULL,则该方法返回true。由于pop_back()和resize()方法,M.total()==0并不意味着M.data==NULL


因此,可能有数据仍在
img\u cam1
中,尽管如果不进行调试,我将无法知道。

似乎是一个bug。您是否尝试了and而不是
>
运算符的组合?它是否会无限期地继续?还是在它停止之前执行了许多循环?i、 e.它还没有更新yetAlso,请清楚地格式化您的代码,并在整个过程中使用类似的样式,这将提高其可读性,从而使您更容易阅读debug@sgarizvi,我尝试了抓取和检索,read(),我看不出有什么不同。事实上,当cam被移除时,imshow窗口会变长。@THELTHALCODER,它将永远继续!我等了很长时间,它看起来像Opencv本身的一个bug!无法使用cap_cam1。打开(1);因为它在while循环中不断地重新打开相机。。因此,图像将是flickering@PrakashM我理解,但我对OpenCV了解不够,无法想出另一个“解决方案”@PrakashM您是否检查了
img_cam1
在拔下摄像头时是否包含空数据?没问题,谢谢您的回复。img_cam1不是null,因为img_cam1.empty()不是true