python - 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 块?
谢谢!
解决方案
使用 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中的帮助方法有助于提供对象可用的所有方法和属性。它有助于从控制台本身快速调试库并查看方法和文档。
推荐阅读
- react-native - 如何在 React Native FlatList 中显示空单元格
- python - TextX 检索对象父类型
- java - Apache PDFBox 的 PDF 无声打印缺少边距和方向
- python - 是否有一种安全且不受欺骗的方式来检测文件类型?
- laravel - 如何使用 Laravel 和 Nuxtjs 进行身份验证,包括登录、注销和密码重置?
- python - python中的SQL代码-双索引数据透视表计数
- android - kotlin android nav graph go back 导致重新创建旧片段
- python - 通过分隔符拆分熊猫列,行中有两种不同的大小
- c# - Using WIA to scan a doc, but the list doesn't show scanner's wirelessly connected to my network
- wordpress - WordPress wrong Redirect