图像数据的表示与基本运算(三)

1.1.3 OpenCV读写视频文件

调用函数cv.VideoCapture()创建一个VideoCapture对象,就可以读取视频文件、网络视频流的每一帧图像,但没有声音。输入参数filename为字符串,用于指定读取的视频文件名(可包含文件存放的目录路径)、或网络视频流的URL地址。

通过获取视频文件的帧率fps = cap.get(cv.CAP_PROP_FPS)来设置cv.waitKey()的等待时间,以便按正常帧率播放。如果等待时间设置的太短,视频就会播放的非常快;如果等待时间设置的太长,播放就会很慢(你可以使用这种方法控制视频的播放速度)。

调用函数cv.VideoWriter()创建一个VideoWriter对象,就可以把处理后的每一帧图像保存到视频文件中。

#OpenCV视频文件的读写

#导入用到的包

import numpy as np

import cv2 as cv

#创建VideoCapture对象读取视频文件

cap = cv.VideoCapture('./imagedata/atrium.mp4')

#调用VideoCapture对象的成员函数isOpened(),查看文件打开状态

#返回True正常继续,False失败退出

if not cap.isOpened():

    print("Cannot open the file")

    exit()

#调用VideoCapture对象的成员函数get(),获取视频的帧率、帧宽和高

fps = cap.get(cv.CAP_PROP_FPS)

frame_width = cap.get(cv.CAP_PROP_FRAME_WIDTH)

frame_height = cap.get(cv.CAP_PROP_FRAME_HEIGHT)

#指定保存视频文件的编码器

fourcc = cv.VideoWriter_fourcc(*'XVID')

#创建视频文件保存VideoWriter对象

out_gray = cv.VideoWriter('video_gray.avi', fourcc, int(fps), \

                          (int(frame_width), int(frame_height)), isColor=False)

#读取视频图像帧直至按Esc键退出或播放到最后一帧

while cap.isOpened():

    #采集视频图像帧

    ret, frame = cap.read()

    #如果正确读取视频图像帧,返回值ret为True,否则为False则退出程序

    if not ret:

        print('Cannot receive frame, or end of file playback, Exiting ...')

        break

    #以下代码处理视频图像帧,将每帧图像转换为灰度图像

    gray_frame = cv.cvtColor(frame, cv.COLOR_BGR2GRAY)

    #调用VideoWriter对象成员函数将转换后的图像帧保存到视频文件中

    out_gray.write(gray_frame)

    #显示图像

    cv.imshow('Video color frame', frame)

    cv.imshow('Video gray frame', gray_frame)

    #根据视频文件帧率播放图像,按Esc键退出

    if  cv.waitKey(int(1000/fps)) & 0xFF == 27:

        break

cap.release()      #退出视频播放并释放VideoCapture对象

out_gray.release()  #释放VideoWriter对象

cv.destroyAllWindows()  #关闭图像显示窗口并释放资源

#---------------------------------------------------

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