问题描述
在Linux上尝试实现基本的try / except语句从摄像机获取帧时,我注意到当摄像机丢失或设备索引错误时,OpenCV不会引发错误。而是显示警告。我怎么能抓住呢?
示例:
import cv2
def foo(camera_index):
try:
cap = cv2.VideoCapture(camera_index)
except Exception:
print("Couldn't open camera at {}".format(camera_index))
在/ dev / video / 0处使用正在运行的摄像机运行foo(1)将打印:
WARN:0] global /tmp/pip-req-build-kne9u3r2/opencv/modules/videoio/src/cap_v4l.cpp (893) open VIDEOIO(V4L2:/dev/video1): can't open camera by index
然后我的except是没有用的,因为cv2永远不会引发适当的异常(但是消息文本听起来像是错误)。
解决方法
您无法捕获这些警告,但可以检查是否已使用isOpened()方法成功创建了VideoCapture
对象。
例如:
cap = cv2.VideoCapture(camera_index)
if not cap.isOpened():
raise Exception("Couldn't open camera {}".format(camera_index))
在创建VideoCapture
对象之后执行此检查是一种常见的模式;另请参见here。