首页 > 解决方案 > cv2 在 Python 中不会出错,因此不能与 except 块一起使用

问题描述

我正在使用 cv2 在 Python 中启动相机。我希望它灵活,所以无论用户使用的是内置摄像头还是 USB 摄像头,它都可以工作。如果无法识别凸轮,它也会显示错误。

这就是我写的多远。

try:    
    camera = cv2.VideoCapture(0)
            
except:
    try:
        camera = cv2.VideoCapture(1)
                
    except:
        print("")
        print("There was a problem accessing your camera, please try again")
        print("Exiting now...")
        time.sleep(10)
        exit()

问题是,如果 cv2 没有检测到凸轮,它不会给出 Python 错误。它只是给出以下警告:

[ WARN:0] global /tmp/pip-req-build-ddpkm6fn/opencv/modules/videoio/src/cap_v4l.cpp (893) open VIDEOIO(V4L2:/dev/video2): can't open camera by index

因此,第二个 except 块没有被执行,这可能会让我的用户对警告感到困惑。我该如何做到这一点,以便执行 except 块?

谢谢!

标签: pythonpython-3.xopencvexceptioncv2

解决方案


使用 cv2.VideoCapture( invalid device number ) 不会引发异常。它构造了一个包含无效设备的设备——如果你使用它,你会得到异常。

测试构建的对象 None 而不是 isOpened() 以清除无效对象。

import cv2 as cv 

def testDevice(source):
   cap = cv.VideoCapture(source) 
   if cap is None or not cap.isOpened():
       print('Warning: unable to open video source: ', source)

testDevice(0) # no printout
testDevice(1) # prints message

我已经从 -如何正确检查相机是否可用?.

注意:我最初使用提供的帮助方法(即帮助(相机))检查了 VideoCapture 对象。python中的帮助方法有助于提供对象可用的所有方法和属性。它有助于从控制台本身快速调试库并查看方法和文档。


推荐阅读