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

标签 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

感谢您的帮助, 凯尔

最佳答案

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

关于python - OpenCV 无法从视频捕获设备读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44722840/

相关文章:

python - 如何在 url 规则中对 view_func 进行单元测试?

python - python中的"Precompile"函数,编译时计算

c# - 在 Emgu 中使用 Erode 和 Dilate (OpenCV for C#)

opencv - 无法在64位Windows 7上运行Opencv GPU

objective-c - 任何人都有如何使用 AVAssetWriter 同时编写音频和视频的示例?

c++ - 如何从 QGLWidget 录制视频?

python - 从python中的actionscript读取base64/zlib编码的字符串

python - 如何增加 google speech api 中的收听时间?

python - 如何停止在 Python 中打印 OpenCV 错误消息

c++ - 为什么在 Directshow 中捕获图形不起作用?