Author:qyan.li
Date:2022.6.19
Topic:借助于OpenCV将多帧图像合并为视频及OpenCV录制视频并保存
~~~~~~~~最近一直在网络上检索借助于OpenCV如何将多帧图像合并为视频,了解到可以借助于VideoWrite()函数实现,顺便学习一下VideoWriter函数使用,以及借助于此函数实现摄像头视频录制并保存以及将多帧图片合成为视频。
老样子,先上代码,方便大家参考借鉴:
def VideoWrite_Function():
cap = cv2.VideoCapture(0)
fourcc = cv2.VideoWriter.fourcc('m', 'p', '4', 'v')
out = cv2.VideoWriter('./output.mp4v', fourcc, 20, (640,480))
while (cap.isOpened()):
ret, frame = cap.read()
if ret:
out.write(frame)
cv2.imshow('video', frame)
c = cv2.waitKey(1)
if c == 27:
break
else:
break
cap.release()
out.release()
cv2.destroyAllWindows()
关于此代码几处说明:
- cap = cv2.VideoCapture(0)用于获取笔记本电脑默认的内置摄像头,若外接的摄像头改变传入的参数即可
- fourcc = cv2.VideoWriter.fourcc(‘m’, ‘p’, ‘4’, ‘v’)用于指定输出视频的格式,还有其他诸多格式可供修改,请自行检索
- VideoWriter()构造函数->VideoWriter(filePath,Videotype,fps,frameSize),类的实例化完成后,借助于write()函数写入frame即可
- VideoWriter()构造函数中传入的frameSize必须与自身电脑相一致,可借助于注释的代码进行确定
- 输出视频的文件后缀必须为mp4v,而不是mp4,否则视频可以正常保存,但无法正常外部播放
老样子,先上代码,方便大家参考借鉴:
def createVideo(filePath):
fourcc = cv2.VideoWriter.fourcc('m', 'p', '4', 'v')
out = cv2.VideoWriter('./TestOutput.mp4', fourcc, 5, (220,480))
fileNames = os.listdir(filePath)
print(fileNames)
for file in fileNames:
frame = cv2.imread(str(filePath) + '/' + str(file))
out.write(frame)
cv2.imshow('video',frame)
c = cv2.waitKey(1)
if c == 27:
break
out.release()
cv2.destroyAllWindows()
关于此代码的几点小说明:
- VideoWriter的write方法写入的对象为imread后返回的对象,图像必须经imread函数读取
- VideoWriter构造函数中frameSize也必须与图片大小相匹配,但与摄像头录制不同,此处需要 变换下位置,即frame.shpe输出(480, 220, 3),构造函数中填入(220,480)
- 此处使用mp4的文件后缀名即可,不必使用mp4v
~~~~~~~~总结一下,代码的核心在于VideoWriter()类的构造和使用,使用有两个注意点:
- 摄像头录制视频的保存文件后缀名不能为mp4,否则视频无法正常播放,改为mp4v,其他格式应该也可,自己并未尝试,注意需要与fourcc相匹配 最后,关于程序执行的一个注意事项:
- 报错
cv2.error: OpenCV(4.5.5) D:\a\opencv-python\opencv-python\opencv\modules\imgproc\src\color.cpp:182: error: (-215:Assertion failed) !_src.empty() in function 'cv::cvtColor'
,根据自己的代码调试经验,无论程序出现什么错误,基本都会出现这个错误,不必过分纠结于报错信息,关注代码。
Original: https://blog.csdn.net/DALEONE/article/details/125359726
Author: 隔壁李学长
Title: 借助于OpenCV将多帧图像合并为视频及OpenCV录制视频并保存
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/701592/
转载文章受原作者版权保护。转载请注明原作者出处!