一、说明
OpenCV的VideoCapture类和VideoWriter类提供了视频处理功能,支持各种格式的视频文件。 视频处理的基本操作步骤如下。
- (1)将视频文件或者摄像头作为数据源来创建VideoCapture对象。
- (2)调用VideoCapture对象的read()方法获取视频中的帧,每一帧都是一幅图像。
- (3)调用VideoWriter对象的write()方法将帧写入视频文件,或者调用cv2.imshow()函数在窗口中显示帧(即播放视频)。
二、播放视频例子
OpenCV播放视频的实质是逐帧读取和显示帧图像。
创建VideoCapture对象时,如果参数传入视频名字表示从文件读取视频。如果传入一个整形数值,表示从摄像头读取视频,数值为摄像头编号。
import cv2
# opencv对视频的简单操作
if __name__ == '__main__':
# 创建VideoCatpture对象
video = cv2.VideoCapture("./test2-5.mp4") # 读取视频(视频源为视频文件)
# video = cv2.VideoCapture(0) # 读取视频(视频源为编号0的摄像头)
fps = video.get(cv2.CAP_PROP_FPS) # 读取视频帧速率
# 显示视频
while True:
ret, frame = video.read() # 读取一帧视频,一帧就是一张图像
if ret == False:
break
cv2.imshow("myframe", frame) # 显示
cv2.waitKey(int(60/fps)) # 用帧率来计算显示帧间隔
cv2.destroyAllWindows()
三、保存视频例子
将视频写入文件与播放视频类似,需要逐帧将视频写入文件。
常用的解码器格式如下:
- cv2.VideoWriter_fourcc('P','I','M','1'):XVID的MPEG-1编码格式,视频文件扩展名为.avi。 cv2.VideoWriter_fourcc('M','P','4','2'):Microsoft的MPEG-4编码格式,视频文件扩展名为.avi。
- cv2.VideoWriter_fourcc('X','V','I','D'):XVID的MPEG-4编码格式,视频文件扩展名为.avi。
- cv2.VideoWriter_fourcc('F','L','V','1'):XVID的MPEG-4编码格式,视频文件扩展名为.flv。
import time
import cv2
# opencv对视频的简单操作
if __name__ == '__main__':
# 创建VideoCatpture对象
video = cv2.VideoCapture("./test2-5.mp4")
# 视频的存储对象
fps = video.get(cv2.CAP_PROP_FPS) # 读取视频帧速率
size = (int(video.get(cv2.CAP_PROP_FRAME_WIDTH)),
int(video.get(cv2.CAP_PROP_FRAME_HEIGHT)))
save_v = cv2.VideoWriter("./save_v.avi", # 写入视频文件
cv2.VideoWriter_fourcc('X','V','I','D'), # 视频格式
fps, # 视频帧率
size) # 视频分辨率
# 显示视频
while True:
ret, img = video.read()
if ret == False:
break
cv2.imshow("myimage", img)
save_v.write(img) # 一帧一帧的写入把视频写入文件
cv2.waitKey(int(60/fps))
cv2.destroyAllWindows()