首页 > 编程问答 >如何让 VideoCapture 返回错误而不是警告?

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

时间:2024-07-27 06:55:12浏览次数:8  
标签:python opencv error-handling video-capture

当尝试在 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 永远不会引发适当的异常(但消息文本听起来像是一个错误)。


OpenCV 没有对 VideoCapture 失败抛出异常。它返回一个错误代码(通常为 None )和一个警告消息。要捕获这种情况并抛出异常,可以检查 VideoCapture 的打开状态,并根据需要手动抛出异常。

以下是更新后的代码:

import cv2

def foo(camera_index):
    try:
        cap = cv2.VideoCapture(camera_index)
        # 检查 cap 是否已成功打开
        if not cap.isOpened():
            raise IOError("Cannot open webcam")
    except IOError as e:
        print(e)

在这个代码中:

  1. 我们创建 VideoCapture 对象。
  2. 我们使用 cap.isOpened() 检查摄像头是否已成功打开。
  3. 如果 cap.isOpened() 返回 False ,我们抛出一个 IOError ,表示无法打开摄像头。
  4. 然后,可以使用 try...except 块捕获 IOError 并优雅地处理它。

通过这种方式,可以将 OpenCV 的警告行为转换为可捕获的异常,从而更好地控制错误处理。

标签:python,opencv,error-handling,video-capture
From: 64393215

相关文章

  • 使用Python进行PDF旋转
    使用python旋转扫描的pdf后,它工作得很好,但将pdf发送给第三方后,第三方仍然将pdf检测为90度pdf有什么办法可以解决旋转和这个问题importPyPDF2withopen('input.pdf','rb')asfile:#CreateaPDFreaderobjectreader=PyPDF2.PdfReader(file)......
  • Python win32serviceutil QueryServiceStatus:返回值是什么意思?
    我正在学习使用pywin32,并尝试在64位Python3.6.4上使用win32serviceutil模块以下代码:importwin32serviceutilasserviceserviceStatus=service.QueryServiceStatus("WinDefend")print(serviceStatus)返回以下元组:(16,4,197,0,0,0,0)我对wind......
  • Python request-html 未下载 Chromium
    importrequestsfrombs4importBeautifulSoupfromrequests_htmlimportHTMLSessionurl="https://dmarket.com/ingame-items/item-list/csgo-skins?title=recoil%20case"sesion=HTMLSession()response=sesion.get(url)response.html.render()soup=B......
  • VS Code 不改变 python 环境
    我正在使用VS-Code和anaconda环境作为python解释器。我通过ctrl+shift+`选择准确的anaconda基础环境,它也反映在vscode的下侧面板中。但是,当我检查python版本时,它显示我系统的默认python环境3.7.9如果您看到下面的截图,anaconda环境是3.......
  • 使用 Python 打开保存为 Parquet 文件中元数据的 R data.table
    使用R,我创建了一个Parquet文件,其中包含一个data.table作为主要数据,另一个data.table作为元数据。library(data.table)library(arrow)dt=data.table(x=c(1,2,3),y=c("a","b","c"))dt2=data.table(a=22222,b=45555)attr(dt,&......
  • Python 需要 Windows 长路径
    我尝试运行此安装:pip3installmsgraph-sdk它给了我这个错误:它说我需要使用此链接启用Windows长路径:https://learn.microsoft.com/en-us/windows/win32/fileio/maximum-file-path-limitation?tabs=registry#enable-long-paths-in-windows-10-versi......
  • Python griddata() 和 Matlab griddata():某些网格点的结果不同
    在将一些(相当大的物理)Matlab代码转换为Python时,我偶然发现了这种情况。当对相同的二维离散数据进行插值时,Python/Scipy的griddata()函数给出的结果与Matlab的对应函数不同。griddata()Matlab示例代码:Python示例代码:%Samplepoints(x,y):7x5=3......
  • Ebay Python SDK 仅在特定项目类别上返回错误
    我在一个项目中使用ebaySDK一段时间了。最近我尝试导入一些商品,例如手表、手机壳等...并且我使用了eBay自己通过eBay返回的英国商店页面上的类别ID他们的“get_category_suggestions”API端点,但eBay似乎有选择地决定拒绝某些项目并引发服务器错误!为了测试,我做了......
  • 使用特定的Python版本(MacOS)制作virtualenv
    我安装了brew,python3(默认和最新版本)和pip3,pyenv。TensorFlow现在不支持python3.7,所以我听说我应该制作一个独立运行3.6或更低版本的virtualenv。我安装了python3.6.7bypyenvinstall3.6.7但无法制作virtualenv-p3.6.7(mydir)因为3.6.7不在P......
  • 使用Python去除图像中的线条
    我正在尝试使用Python和cv2、numpy、skimage等从黑白图像中删除“阴影线”(如果图像中存在“阴影线”)。本质上,我的图像可以有1或2条曲线,如下例所示。但每条线都有一条1-5像素外的阴影线,需要删除。我怎样才能在Python中做到这一点?原始......