1

长期聆听者,第一次提问。情况如下:

我正在尝试使用 .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() 调用,在这个函数中如下:try: 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

谢谢你的帮助,凯尔

4

1 回答 1

2

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

于 2018-07-10T19:33:48.740 回答