一:捕获视频函数
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()