如何使VideoCapture返回错误而不是警告?

问题描述

在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