Opencv的image.empty()函数不起作用

Pra*_*h M 5 c++ opencv video-capture image-processing

以下代码可以正常工作,直到程序运行时移除 USB 摄像头。断开 USB 摄像头后,我看到一个空白图像,但程序应该停止,因为img_cam1.empty()和!cap_cam1.isOpened()应该是真的。但由于某种原因,两者都是假的!

是什么原因造成的?

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; 
    }
}
Run Code Online (Sandbox Code Playgroud)

USB摄像头拔掉后如何停止程序?

The*_*der 1

来自文档(强调我的):

如果之前对 VideoCapture 构造函数或 VideoCapture::open 的调用成功,则该方法返回 true。

看来你需要在检查是否打开之前调用open 。cap_cam1所以像下面这样:

cap_cam1.open(1);
if (img_cam1.empty() || !cap_cam1.isOpened())
Run Code Online (Sandbox Code Playgroud)

尽管我自己不知道确切的语法,但无法显示解决问题所需的确切代码。

关于我的问题img_cam1.empty()没有任何帮助,但是引用的文档empty():

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

所以也许数据仍然在里面,img_cam1尽管如果不调试我就不会知道。