在 OpenCV for python

问题描述

我正在使用 OpenCV (cv2) 读取视频源以将其显示在桌面应用程序中。视频源是来自 Magewell 图像采集卡设备的外部输入,该设备通过 USB 连接到计算机并通过 HDMI 连接到相机(用户在使用该应用程序时在现场拥有该硬件)。如果 USB 连接丢失,我想向用户显示警告,如果连接重新建立,视频源应该重新开始运行。

但是,当我故意断开图像采集卡 USB 的连接时,我的进程会停止。我收到以下错误消息:

[ WARN:0] global C:\projects\opencv-python\opencv\modules\videoio\src\cap_msmf.cpp (1113) SourceReaderCB::OnReadSample videoio(MSMF): OnReadSample() is called with error status: -1072873822
[ WARN:0] global C:\projects\opencv-python\opencv\modules\videoio\src\cap_msmf.cpp (1125) SourceReaderCB::OnReadSample videoio(MSMF): async ReadSample() call is failed with error status: -1072873822
[ WARN:1] global C:\projects\opencv-python\opencv\modules\videoio\src\cap_msmf.cpp (1159) CvCapture_MSMF::grabFrame videoio(MSMF): can't grab frame. Error: -1072873822

我的代码在类 Camera(threading.Thread) 中运行(Camerathreading.Thread 的子类,因此具有线程的本机方法)。

在这个类的 __init__ 方法中,我设置了 self._cam = cv2.VideoCapture(0)。 (0 是默认视频源,在本例中为帧采集器)。

在启动时,线程原生方法 start() 被称为 super().start()。这会调用 run()run() 调用 __grab_frame,看起来像这样(简化):

def __grab_frame(self):
    # Capture frame
    success,next_frame = self._cam.read() #success is bool value telling if the frame was grabbed. 

    if success:
        frame_dict = dict([relevant data to be parsed on to image_observers,incl. next_frame])
        self.__notify_image_observers(frame_dict)
    else:
        print('not connected')

当我运行此代码时,一切正常,直到我拔出 USB。然后我得到上面显示的三行错误消息,后面跟着 "not connected",一切都停止了。

当我重新连接图像采集卡时,我每隔几秒就会重复收到这条消息(注意新的错误 ID!):

[ WARN:1] global C:\projects\opencv-python\opencv\modules\videoio\src\cap_msmf.cpp (1159) CvCapture_MSMF::grabFrame videoio(MSMF): can't grab frame. Error: -2147483638

... 后跟打印 "not connected"

我也尝试通过启用内置笔记本电脑摄像头来重现该错误,因此我有两个功能性视频源。然后我禁用内置摄像头 (source=0) 以查看 OpenCV 是否能够切换到其他可用的视频源,但在这种情况下我收到相同的错误消息。因此,这似乎是与视频源断开连接而非没有可用视频源相关的问题。

任何帮助将不胜感激!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...