OpenCV-Python 保存视频帧
本文代码实现目的:通过当前电脑摄像头,录制一段视频并进行垂直翻转处理后,保存为处理后的视频文件。
实现
所以我们捕获一个当前计算机的摄像头视频流并逐帧处理它,我们想要保存该视频。对于图像,它非常简单:只需使用cv.imwrite()
. 在这里,需要做更多的工作。
这次我们创建了一个VideoWriter
对象。我们应该指定输出文件名(例如:output.avi
)。然后我们应该指定FourCC
代码。然后应传递每秒帧数 (fps) 和帧大小。最后一个是isColor
标志。如果是True
,编码器期望彩色帧,否则它适用于灰度帧。
FourCC
是一个 4 字节的代码,用于指定视频编解码器。可用代码列表可在fourcc.org
中找到。它依赖于平台。以下编解码器对我来说很好用。
执行效果(最终会输出一个 output.avi 视频文件,也就是当前代码运行结果所录制并处理过的的视频):
main.py
代码:
import numpy as np
import cv2 as cv
# 从当前电脑中的摄像头读取视频流
cap = cv.VideoCapture(0)
width = int(cap.get(cv.CAP_PROP_FRAME_WIDTH))
height = int(cap.get(cv.CAP_PROP_FRAME_HEIGHT))
# 定义编解码器并创建 VideoWriter 对象
fourcc = cv.VideoWriter_fourcc(*'XVID')
out = cv.VideoWriter('output.avi', fourcc, 20.0, (width, height))
# 处理视频
while cap.isOpened():
ret, frame = cap.read()
if not ret:
print('无法收到视频帧数据(该视频流是否已结束?),程序正在退出')
break
# 将每一帧视频进行翻转处理,并写入
frame = cv.flip(frame, 0)
out.write(frame)
cv.imshow('frame', frame)
if cv.waitKey(1) == ord('q'):
break
# 程序结束时,释放资源
cap.release()
out.release()
cv.destroyAllWindows()
本示例直接运行以上代码即可(以上即完整代码)
示例参考原文:https://docs.opencv.org/4.5.5/dd/d43/tutorial_py_video_display.html