下面的代码工作正常,直到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摄像头被删除?
1条答案
按热度按时间gopyfrb31#
来自文档(着重号为mine):
如果对VideoCapture构造函数或VideoCapture::open的上一次调用成功,则该方法返回true。
看起来你需要在检查
cap_cam1
是否打开之前调用open。虽然我自己不知道确切的语法,但我能够显示解决问题所需的确切代码。
关于
img_cam1.empty()
的问题我帮不上什么忙,但是关于empty()
的文档引用了:如果Mat::total()为0或Mat::data为NULL,则该方法返回true。由于pop_back()和resize()方法,M.total()== 0并不意味着M.data == NULL。
因此,可能数据仍然在
img_cam1
中,尽管没有调试我不会知道。