长期倾听者,第一次提问者。这是情况:
我正在尝试使用 .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
感谢您的帮助, 凯尔
最佳答案
对于可能遇到类似情况的任何人,我们最终发现问题是电源问题。有问题的相机有一根 5m 的 USB 电缆,用于获得应用程序所需的额外长度。在这种长度的电缆上,偶尔会出现错误的像素格式,从而产生 HIGHGUI 错误。由于无法更改相机/计算机位置,解决方案是将类包装在另一个可以捕获这些错误的类中,终止流,然后重新连接到相机。无论如何都不是完美的解决方案,但它可以满足当前的目的。
关于python - OpenCV 无法从视频捕获设备读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44722840/