读取视频文件python-opencv

由于cv.imread()函数只能读取图像的数据,不能读取视频文件,所以对于数据需要从摄像头加载的要求,需要使用cv.VideoCapture()函数,通过该函数可以对摄像头进行调用,并读取视频文件数据。该函数是专门用于处理视频文件读取。

文章目录

  • 前言
  • 二、使用步骤
    • 1.代码展示
    • 2.get(propId)函数
  • cv.VideoCapture()函数调用摄像头


前言

cv.VideoCapture()函数,通过该函数可以对摄像头进行调用,并读取视频文件数据。


# 一、cv.VideoCapture()函数是什么?

从函数的原型中可以得知,cv.VideoCapture()函数是用于构造一个能够读取与处理视频文件的的视频对象,并且函数可以将该视频对象返回。

<VideoCapture object> = cv.VideoCapture()
<VideoCapture object> = cv. VideoCapture(filename,
[,apipreference])
                       #filename:读取的视频文件名称。
                       # apipreference:读取数据时设置的属性,例如编码格式、是否调用OpenNI等

函数的主要作用就是定义一个视频对象,即默认构造函数video = cv.VideoCapture(),通过cv.VideoCapture()函数仅仅是创建VideoCapture对象video,如果需要具体读取视频文件,需要使用该VideoCapture对象的open()函数,通过open()函数指出视频文件的路径以及名称。
例如video.open(“./videos/test.mp4”)表示video视频对象读取在本级文件夹中videos的test.mp4视频文件,将视频数据返回。而且当我们输入错误的视频文件名称时,程序不会报错,而且会继续执行,但是当使用视频对象变量时,程序将会报错。为了避免这个问题,需要通过VideoCapture对象video中的isOpened()函数判断是否成功读取到视频文件数据。如果读取成功返回值为True;如果读取失败,则返回值为False,

二、使用步骤

1.代码展示

代码如下(示例):

import cv2 as cv

if __name__ == '__main__':
    video = cv.VideoCapture()
    video.open('./video/test.avi')
    #判断是否成功创建视频流
    while video.isOpened():
        ret,frame = video.read()
        print(ret)
        if ret is True:
            cv.imshow('video',frame)
            #设置播放速速
            cv.waitKey(int(1000 / video.get(cv.CAP_PROP_FPS)))
            #按下q键退出
            if cv.waitKey(1) & 0xFF == ord('q'):
                break
        else:
            break
                    #输出相关参数信息
        print('视频中的图像宽度{}'.format(video.get(cv.CAP_PROP_FRAME_WIDTH))) 
        print('视频中的图像高度{}'.format(video.get(cv.CAP_PROP_FRAME_HEIGHT))) 
        print('视频帧率{}'.format(video.get(cv.CAP_PROP_FPS))) 
        print('视频帧数{}'.format(video.get(cv.CAP_PROP_FRAME_COUNT))) 
        #释放资源并关闭窗口
        video.release()
        cv.destroyAllWindows()

        

cv.VideoCapture()函数不仅仅可以将读取读取的视频数据赋值给申明的变量,而且在读取文件种类上包含多种格式,例如普通视频文件(video.avi)、图像序列或者视频流的URL。通过cv.VideoCapture()函数创建一个视频对象之后,可以利用cv.VideoCapture()对象中的read()函数读取一帧图像,例如ret,frame=video.read(),其中读取一张图像的数据存放在frame中;ret中存放成功读取图片的标志位,如果读取成功,则返回True;若读取失败,则返回False。通常,可以利用ret标志判断视频文件是否到达了末尾。

2.get(propId)函数

cv.VideoCapture对象同时可以利用get(propId)函数来查看视频的属性,通过设定propId获取不同的视频属性,例如视频的宽度、高度、帧数等,其取值为0~18的任意整数,如图2-4所示。Get()方法中propId的可选标志。


## 3. get()方法中propId的可选标志
标志 简记 含义
cv.CAP_PROP_POS_MSEC 0 视频文件的当前位置(以毫秒为单位)
cv.CAP_PROP_POS_FRAMES 1 下一个被解码的帧索引,以0为起点
cv.CAP_PROP_POS_AVI_RATIO 2 视频文件的相关位置,0表示开始,1表示结束
cv.CAP_PROP_FRAME_WIDTH 3 视频流中图像的宽度
cv.CAP_PROP_FRAME_HEIGHT 4 视频流中图像的高度
cv.CAP_PROP_FPS 5 视频流中图像的帧率(每秒帧数)
cv.CAP_PROP_FOURCC 6 编解码器的4字符代码
cv.CAP_PROP_FRAME_COUNT 7 视频流中的帧数
cv.CAP_PROP_FRAME 8 返回的Mat对象的格式
cv.CAP_PROP_MODE 9 指示当前捕捉的模式
cv.CAP_PROP_BRIGHTNESS 10 图像的亮度(仅相机)
cv.CAP_PROP_CONTRAST 11 图像的对比度(仅相机)
cv.CAP_PROP_STAURATION 12 图像饱和度(仅相机)
cv.CAP_PROP_HUE 13 图像的色相(仅相机)
cv.CAP_PROP_GAIN 14 图像的增益(仅相机)
cv.CAP_PROP_EXPOSURE 15 曝光(仅相机)
cv.CAP_PROP_CONVERT_RGB 16 布尔值,确定是否应该将图像转换为RGB格式
cv.CAP_PROP_WHITE_BALANCE_BLUE_U 17 白平衡
cv.CAP_PROP_RECTIFCATION 18 立体相机校正标记

cv.VideoCapture()函数调用摄像头

cv.VideoCapture()函数同时也可以通过调用摄像头的方式来获取视频,其获取方式与从文件中读取视频类似。函数同样返回一个视频对象,只是参数变成了摄像头索引。由于摄像头拍摄的画面可能与实际相反,所以为了解决这个问题,将frame中的数据进行水平翻转处理,即frame=cv.flip(frame,1),实现了摄像头拍摄的图像进行翻转。

<VideoCapture object> = cv. VideoCapture(index,
[,apipreference])
                       #index:摄像头索引,参数0表示使用计算机默认摄像头,同样改用其他参数可以调用其他摄像头。
                       # apipreference:读取数据时设置的属性,例如编码格式、是否调用OpenNI等

你可能感兴趣的:(opencv,python,opencv,python,计算机视觉)