一:捕获视频函数

1.函数:cv2.VideoCapture(参数)

2.参数说明:

(1)开启摄像头:参数一般为0,你可以通过设置成 1 或 者其他的来选择别的摄像头。

(2)从文件夹中获取视频:参数为字符串形式的文件路径

3.示例:

cap = cv2.VideoCapture(0)   #cap:存放参数

二:读取视频函数

1.函数:cap.read()

2.函数说明:

(1)cap.read 中cap与捕获视频函数存放函数一致,可以自己命名,括号一般不用填写。

(2)ret,frame=cap.read函数会返回两个函数值。一个为布尔逻辑值(True、False),表示是否读到视频画面帧,返回到ret。另一个是视频画面帧信息(矩阵)返回到frame。

3.示例:

ret, frame = cap.read()     #ret布尔值,frame视频画面信息

三:判断视频读取正常函数

1.函数:cap.is Opened()

2.说明:函数返回值为布尔值,括号里一般不用填写。

3.示例:

while(cap.isOpened()):
ret,frame=cap.read()

四:显示视频函数

1.函数:cv2.imshow('窗口名称',视频存放参数)

2.示例

cv2.imshow('viedo',cap)

五:保存视频函数

(1)背景知识补充

接下来指定 FourCC 编码、播放频率和帧的大小也都 需要确定。

         FourCC 就是一个 4 字节码,用来确定视频的编码格式。可用的编码列表可以从fourcc.org查到。In Fedora: DIVX, XVID, MJPG, X264, WMV1, WMV2. (XVID is more preferable. MJPG results in high size video. X264 gives very small size video)

        FourCC 码以下面的格式传给程序,以 MJPG 为例:cv2.cv.FOURCC('M','J','P','G') 或者 cv2.cv.FOURCC(*'MJPG')。

      有了上述背景补充,我们可以了解到,保存一个视频需要FourCC编码值、帧率值、视频分辨率。在保存视频时,我们可以按照需求自己定义所需参数值,或者保持原视频参数不变。后一种情况相比第一种情况,只是多了获取原视频参数的操作。

(2)需要用到的代码段

1.获取原视频参数函数

①获取FourCC值

fourcc = int(cap.get(cv2.CAP_PROP_FOURCC)) 
   print('fourcc=',fourcc)

②获取原视频帧率

fps = cap.get(cv2.CAP_PROP_FPS)
    print('fps=%d'%fps)

③获取原视频的宽、高

frameSize=(int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)),int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)))    
print('frameSize=', frameSize)

2.创建需要写入的视频文件

out = cv2.VideoWriter('需要保存视频的文件路径',fourcc, 帧率值, (宽,高))

out = cv2.VideoWriter("outputVideo", fourcc, fps, frameSize)

3.读取成功就将数据帧写入到文件

out.write(frame)

六:键盘绑定函数

1.函数:cv2.waitKey(参数)

2.说明:括号中参数表示读取一帧所需的时间(毫秒),一般25毫秒就可以了。与图像键盘绑定函数用法一样。

七:视频灰度函数

1.函数:cv2.cvtColor(frame,cv2.Color_BGR2GRAY)

2.示例:

gray=cv2.cvtColor(frame,cv2.Color_BGR2GRAY)

八:练习

加载一个视频,进行灰度显示,用‘q’键控制保存时长

import cv2
cap=cv2.VideoCapture('F:/video/video.mp4')
fourcc = int(cap.get(cv2.CAP_PROP_FOURCC))
print('fourcc=', fourcc)
fps = cap.get(cv2.CAP_PROP_FPS)
print('fps=%d' % fps)
frameSize = (int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)), int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)))
print('frameSize=', frameSize)
out= cv2.VideoWriter('F:/video/gray.mp4', fourcc, fps, frameSize)
while(cap.isOpened()):
    ret,frame=cap.read()
    if ret==True:
        gary=cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)
        out.write(gary)
        cv2.imshow('video',gary)
    if cv2.waitKey(1) == ord('q'):
            break
cap.release()
out.release()