如何让 VideoCapture 出现 return 错误而不是警告?
How do I get VideoCapture to return errors instead of warnings?
当尝试实现基本的 try/except 语句以从 Linux 上的相机获取帧时,我注意到当相机丢失或设备索引错误时,OpenCV 不会引发错误;相反,它会打印一条警告。我怎么能抓住这个?
示例:
import cv2
def foo(camera_index):
try:
cap = cv2.VideoCapture(camera_index)
except Exception:
print("Couldn't open camera at {}".format(camera_index))
运行 foo(1) 在 /dev/video/0 处使用工作相机将打印:
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。
当尝试实现基本的 try/except 语句以从 Linux 上的相机获取帧时,我注意到当相机丢失或设备索引错误时,OpenCV 不会引发错误;相反,它会打印一条警告。我怎么能抓住这个?
示例:
import cv2
def foo(camera_index):
try:
cap = cv2.VideoCapture(camera_index)
except Exception:
print("Couldn't open camera at {}".format(camera_index))
运行 foo(1) 在 /dev/video/0 处使用工作相机将打印:
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。