opencv python 从摄像头获取视频、帧率、分辨率等属性设置和使用

opencv python 从摄像头获取视频、帧率、分辨率等属性设置和使用

文章目录:

1,为了获取视频,你应该创建一个 VideoCapture 对象。他的参数可以是设备的索引号,或者是一个视频文件。设备索引号就是在指定要使用的摄像头。一般的笔记本电脑都有内置摄像头。所以参数就是 0。你可以通过设置成 1 或者其他的来选择别的摄像头。之后,你就可以一帧一帧的捕获视频了。但是最后,别忘了停止捕获视频。使用 ls /dev/video*命令可以查看摄像头设备

2,ret, frame = cap.read() 返回一个布尔值(True/False)。如果帧读取的是正确的,就是 True。所以最后你可以通过检查他的返回值来查看视频文件是否已经到了结尾。有时 cap 可能不能成功的初始化摄像头设备。这种情况下上面的代码会报错。你可以使用 cap.isOpened(),来检查是否成功初始化了。如果返回值是True,那就没有问题。否则就要使用函数 cap.open()。你可以使用函数 cap.get(propId) 来获得视频的一些参数信息。这里propId 可以是 0 到 18 之间的任何整数。每一个数代表视频的一个属性,见表其中的一些值可以使用cap.set(propId,value) 来修改,value 就是

你想要设置成的新值。例如,我可以使用 cap.get(3) 和 cap.get(4) 来查看每一帧的宽和高。默认情况下得到的值是 640X480。但是我可以使用 ret=cap.set(3,320)和 ret=cap.set(4,240) 来把宽和高改成 320X240。

官方给出的set(self, propId, value)的函数的定义说明

       def set(self, propId, value): # real signature unknown; restored from __doc__
        """
        set(propId, value) -> retval
        .   @brief Sets a property in the VideoCapture.
        .   
        .   @param propId Property identifier from cv::VideoCaptureProperties (eg. cv::CAP_PROP_POS_MSEC, cv::CAP_PROP_POS_FRAMES, ...)
        .   or one from @ref videoio_flags_others
        .   @param value Value of the property.
        .   @return `true` if the property is supported by backend used by the VideoCapture instance.
        .   @note Even if it returns `true` this doesn't ensure that the property
        .   value has been accepted by the capture device. See note in VideoCapture::get()
        """

注意:

从上面给出的定义说明,有些属性值设置成功之后,即使返回True值,也不代表设置的属性值会被捕捉设备接收,详细参见:VideoCapture::get()。我尝试设置摄像头的帧率,虽然返回True值,但是帧率并没有发生改变。

propld : property id
set(self, propId, value) 函数的定义,第一参数填写属性的id就是propId,当然也可以直接填写属性的全称例如,设置帧的宽度:

cap.set(3, 1080)
等价于
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 1080)

第一中设置属性比较简单,第二种设置属性比较直观

set(self, propId, value): 对应的所有属性表如下:

参数 propld 功能
cv2.CAP_PROP_POS_MSEC 0 视频文件的当前位置(以毫秒为单位)或视频捕获时间戳
cv2.CAP_PROP_POS_FRAMES 1 基于0的索引将被解码/捕获下一帧
cv2.CAP_PROP_POS_AVI_RATIO 2 视频文件的相对位置:0 - 视频的开始,1 - 视频的结束
cv2.CAP_PROP_FRAME_WIDTH 3 帧的宽度
cv2.CAP_PROP_FRAME_HEIGHT 4 帧的高度
cv2.CAP_PROP_FPS 5 帧速
cv2.CAP_PROP_FOURCC 6 4个字符表示的视频编码器格式
cv2.CAP_PROP_FRAME_COUNT 7 帧数
cv2.CAP_PROP_FORMAT 8 byretrieve()返回的Mat对象的格式
cv2.CAP_PROP_MODE 9 指示当前捕获模式的后端特定值
cv2.CAP_PROP_BRIGHTNESS 10 图像的亮度(仅适用于相机)
cv2.CAP_PROP_CONTRAST 11 图像对比度(仅适用于相机)
cv2.CAP_PROP_SATURATION 12 图像的饱和度(仅适用于相机)
cv2.CAP_PROP_HUE 13 图像的色相(仅适用于相机)
cv2.CAP_PROP_GAIN 14 图像的增益(仅适用于相机)
cv2.CAP_PROP_EXPOSURE 15 曝光(仅适用于相机)
cv2.CAP_PROP_CONVERT_RGB 16 表示图像是否应转换为RGB的布尔标志
cv2.CAP_PROP_WHITE_BALANCE 17 目前不支持
cv2.CAP_PROP_RECTIFICATION 18 立体摄像机的整流标志

get(self, propId):函数的作用是获取摄像头设置的相关属性值,官方给出的定义如下:

    def get(self, propId): # real signature unknown; restored from __doc__
        """
        get(propId) -> retval
        .   @brief Returns the specified VideoCapture property
        .   
        .   @param propId Property identifier from cv::VideoCaptureProperties (eg. cv::CAP_PROP_POS_MSEC, cv::CAP_PROP_POS_FRAMES, ...)
        .   or one from @ref videoio_flags_others
        .   @return Value for the specified property. Value 0 is returned when querying a property that is
        .   not supported by the backend used by the VideoCapture instance.
        .   
        .   @note Reading / writing properties involves many layers. Some unexpected result might happens
        .   along this chain.
        .   @code {.txt}
        .   `VideoCapture -> API Backend -> Operating System -> Device Driver -> Device Hardware`
        .   @endcode
        .   The returned value might be different from what really used by the device or it could be encoded
        .   using device dependent rules (eg. steps or percentage). Effective behaviour depends from device
        .   driver and API Backend
        """

注意:

并非所有的参数都支持所有的摄像机 – 实际上,它们是OpenCV库中最麻烦的部分之一。每种摄像机类型 – 从android摄像机到usb摄像机到专业摄像机提供了一个不同的接口来设置其参数。并且在OpenCV代码中有许多分支来支持尽可能多的分支,但当然不是所有的可能性都被覆盖。
你可以做的是调查你的相机驱动程序,做一个补丁OpenCV,并发送到code.opencv.org。这样别人就会喜欢你的工作,就像你喜欢别人的一样。

Reference:
1、https://segmentfault.com/a/1190000015575701
2、https://blog.csdn.net/qq_31077649/article/details/75194719
3、http://zhaoxuhui.top/blog/2017/05/05/%E5%9F%BA%E4%BA%8EPython%E7%9A%84OpenCV%E5%9B%BE%E5%83%8F%E5%A4%84%E7%90%863.html

在这里插入图片描述



在这里插入图片描述
♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠

你可能感兴趣的:(9—opencv-python,Pillow图像处理)