Opencv的image.empty()函数不工作

q3qa4bjr  于 2023-01-05  发布在  其他
关注(0)|答案(1)|浏览(234)

下面的代码工作正常,直到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; 
    }
}

如何停止程序时,USB摄像头被删除?

gopyfrb3

gopyfrb31#

来自文档(着重号为mine):
如果对VideoCapture构造函数或VideoCapture::open的上一次调用成功,则该方法返回true。
看起来你需要在检查cap_cam1是否打开之前调用open。

cap_cam1.open(1);
if (img_cam1.empty() || !cap_cam1.isOpened())

虽然我自己不知道确切的语法,但我能够显示解决问题所需的确切代码。
关于img_cam1.empty()的问题我帮不上什么忙,但是关于empty()的文档引用了:
如果Mat::total()为0或Mat::data为NULL,则该方法返回true。由于pop_back()和resize()方法,M.total()== 0并不意味着M.data == NULL。
因此,可能数据仍然在img_cam1中,尽管没有调试我不会知道。

相关问题