C++ Opencv';s image.empty()函数不工作
在程序运行时卸下USB摄像头之前,以下代码工作正常。断开USB摄像头后,我看到一个空白图像,但程序应该停止,因为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
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