OpenCV无法从视频捕获设备读取

时间:2017-06-23 13:37:20

标签: python opencv video-capture highgui

长时间听众,第一次问问。情况如下:

我尝试使用.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

感谢您的帮助, 凯尔

1 个答案:

答案 0 :(得分:1)

对于可能遇到类似问题的任何人,我们最终发现该问题是电源问题。有问题的相机使用5m usb电缆来获得应用所需的额外长度。在电缆的这一长度上,偶尔会出现坏像素格式,从而产生HIGHGUI错误。由于无法更改摄像机/计算机的位置,因此解决方案是将类包装到另一个可捕获这些错误的类中,杀死流,然后重新连接至摄像机。无论如何,这都不是一个完美的解决方案,但是它可以满足当前的目的。