长时间听众,第一次问问。情况如下:
我尝试使用.read()功能从多个opencv(python)视频捕获设备读取帧。使用opencv 2.4.11时,随机时间会发生以下错误:
HIGHGUI错误:V4L2:OpenCV不支持传入图像的像素格式 无法停止流:错误的文件描述符
这个错误似乎发生在.read()调用中,甚至在try / except中包装调用也无法捕获问题,因为.read()调用永远不会返回作为异常。
当尝试更新到最新版本的ocv(3.2.0)时,.read()无法返回任何帧。
其他信息: 机器:Linux Mint 18.1 相机:https://www.amazon.com/ELP-megapixel-surveillance-machine-monitor/dp/B015FIKTZC Python:2.7
更新: 代码:
以下内容发生在videoCamera类中,该类包含最初来自的视频对象: self.video = cv2.VideoCapture(self.cameraSerialAddress)
然后对此类进行getFrame()调用,此函数内容如下: 尝试: retVal,frame = self.video.read()
if frame is None:
print("no frame available for camera: "+str(self.cameraSerialAddress) + " Reconnecting to camera")
self.video.release()
self.video = None
self.hasConnection = False
self.frame = None
return
elif frame is not None:
self.frame = frame
感谢您的帮助, 凯尔
答案 0 :(得分:1)
对于可能遇到类似问题的任何人,我们最终发现该问题是电源问题。有问题的相机使用5m usb电缆来获得应用所需的额外长度。在电缆的这一长度上,偶尔会出现坏像素格式,从而产生HIGHGUI错误。由于无法更改摄像机/计算机的位置,因此解决方案是将类包装到另一个可捕获这些错误的类中,杀死流,然后重新连接至摄像机。无论如何,这都不是一个完美的解决方案,但是它可以满足当前的目的。