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摄像头拔掉后如何停止程序?
来自文档(强调我的):
如果之前对 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尽管如果不调试我就不会知道。
| 归档时间: |
|
| 查看次数: |
11858 次 |
| 最近记录: |