首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >列表支持的OpenCV视频捕获属性

列表支持的OpenCV视频捕获属性
EN

Stack Overflow用户
提问于 2017-12-22 04:26:04
回答 1查看 2.6K关注 0票数 2

我试图写一个函数,自动确定哪一组视频捕获属性是支持特定的摄像头。这对于v4l2-ctl来说很简单,但是我不知道如何使用OpenCV的内置函数来干净地完成它。使用v4l2-ctl,我将调用:

代码语言:javascript
复制
$ v4l2-ctl --device <webcam> --list-ctrls

它为我的笔记本电脑集成网络摄像头(/dev/video0)和我插入的任何USB摄像头提供了一套不同的摄像头控制。到目前为止,在中,我所能做的最好的是:

代码语言:javascript
复制
def list_supported_capture_properties(cap: cv2.VideoCapture):
    """ List the properties supported by the capture device.
    """
    supported = list()
    for attr in dir(cv2):
        if attr.startswith('CAP_PROP'):
            if cap.get(getattr(cv2, attr)) != -1:
                supported.append(attr)
    return supported

当调用此函数时,OpenCV输出许多错误消息,如下所示:

代码语言:javascript
复制
VIDEOIO ERROR: V4L2: Autofocus is not supported by your device
VIDEOIO ERROR: V4L2: getting property #32 is not supported

如果我将cap.get包装在Python语句中,那么上面的视频it错误就不会被捕获,所以就好像我根本没有尝试过一样--只是根本没有尝试。按照cv2.error中的建议,将for子句专门用于this answer并不适用于我。我可以按照this answer中的建议,将输出重路由到dev/null,但对我来说,这更像是一种创可贴,而不是一种解药。

以下是我的两个问题:

  1. 是否有可能在Python中捕获OpenCV视频it错误?我该怎么做?
  2. 是否有更好的方法只获取支持的捕获属性列表?是否最好将v4l2-ctl作为子进程运行,然后处理输出中的文本以确定捕获属性?
EN

回答 1

Stack Overflow用户

发布于 2019-11-05 01:12:47

答案有点晚了,但也许还有其他人也有同样的问题。

获得不同的属性是opencv的一个缺陷,而opencv已经存在很多年了。问题是,v4l2设备有两个不同的库(v4l2和libv4l2)。用libv4l2编译opencv会导致这些错误。

问题1:您看到的错误不是由python产生的,而是由底层的opencv c++代码产生的。看来嘿是直接写出来的。

问题2:在没有libv4l2的情况下编译opencv时,您的代码应该给出与v4l2-ctl完全相同的列表。在使用损坏的opencv-版本时,您不能设置任何CAP_PROP参数。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47935846

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档