视频文件的读写
opencv提供了VideoCapture类和VideoWriter类来支持各种格式的视频文件,支持的格式类型会因系统的不同而变化,但应该都支持AVI格式;在到达视频文件末尾之前,VideoCapture类可以通过read()函数来获取新帧,每一帧都是基于BGR格式的图像
代码示例:
import cv2
videocapture = cv2.VideoCapture('MyInputVid.avi')
fps = videocapture.get(cv2.CAP_PROP_FPS) # 获取帧数
size = (int(videocapture.get(cv2.CAP_PROP_FRAME_WIDTH)), int(videocapture.get(CAP_PROP_FRAME_HEIGHT))) # 获得帧大小
# 第一个参数表示指定的视频文件名,如果这个文件名对应的文件存在,会被覆盖
# 第二个参数表示指定的视频编解码器,编解码器的可用性根据系统的不同而不同
videowriter = cv2.VideoWriter('MyOutVid.avi', cv2.VideoWriter_fourcc('I','4','2','0'), fps, size)
# 返回两个参数,第一个是布尔类型,如果没有出错那么就返回True,否则返回False
# 第二个参数是读取文件返回的帧
success, frame = videocapture.read()
while success:
videowriter.writer(frame)
success, frame = videocapture.read() # 读取下一帧
捕获摄像头的帧
VideoCapture类可以获得摄像头的帧流,但是对于摄像头而言,通常不是用视频的文件名来构造VideoCapture类,而是需要传递摄像头的设备索引
示例代码:
import cv2
videocapture = cv2.VideoCapture(0)
fps = 30
size = (int(videocapture.get(cv2.CAP_PROP_FRAME_WIDTH)), int(videocapture.get(CAP_PROP_FRAME_HEIGHT))) # 获得帧大小
# 第一个参数表示指定的视频文件名,如果这个文件名对应的文件存在,会被覆盖
# 第二个参数表示指定的视频编解码器,编解码器的可用性根据系统的不同而不同
videowriter = cv2.VideoWriter('MyOutVid.avi', cv2.VideoWriter_fourcc('I','4','2','0'), fps, size)
# 返回两个参数,第一个是布尔类型,如果没有出错那么就返回True,否则返回False
# 第二个参数是读取文件返回的帧
success, frame = videocapture.read()
numFramesRemaining = 10 * fps - 1
while success and numFramesRemaining>0:
videowriter.writer(frame)
success, frame = videocapture.read() # 读取下一帧
numFramesRemaining -= 1
videocapture.release()
videocapture类的get()方法不能返回摄像头帧速率的准确值,他总是返回0
整理来自:opencv3计算机视觉 Python语言实现