使用opencv的cv::VideoCapture 类对象从摄像头处获取图像时,没法通过isOpened获取的图像判断摄像头是否有断开,即开始时成功获取到图像后,中间摄像头断开了,返回的图像数据还是正常的。
使用摄像头获取图像:cv::VideoCapture cap;cap.open(0);cv::Mat img, irImg;cap >> img;
正常情况下获取到的img是有数据的,摄像头断开时获取到的img也依然有数据。
判断摄像头是否断开方法:
通过获取摄像头图片的色调,如果摄像头连接正常,则返回来的色调是0,如果摄像头断开连接了,则色调返回来先是13,然后变成-1。因此直接判断返回值是不是0就可以知道摄像头是否断开:
double lightCapHue = cap.get(CAP_PROP_HUE);if(lightCapHue != 0 ){//已断开}