cv2.VideoWriter 保存图像为视频的几个问题
Posted 老衲要学习
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了cv2.VideoWriter 保存图像为视频的几个问题相关的知识,希望对你有一定的参考价值。
用opencv库的cv2.VideoWriter函数保存图像为视频
一、先确定要保存的视频的编码方式
- cv2.VideoWriter_fourcc(‘I’, ‘4’, ‘2’, ‘0’),该参数是YUV编码类型,文件名后缀为.avi
- cv2.VideoWriter_fourcc(‘P’, ‘I’, ‘M’, ‘I’),该参数是MPEG-1编码类型,文件名后缀为.avi
- cv2.VideoWriter_fourcc(‘X’, ‘V’, ‘I’, ‘D’),该参数是MPEG-4编码类型,文件名后缀为.avi
- cv2.VideoWriter_fourcc(‘T’, ‘H’, ‘E’, ‘O’),该参数是Ogg Vorbis,文件名后缀为.ogv
- cv2.VideoWriter_fourcc(‘F’, ‘L’, ‘V’, ‘1’),该参数是Flash视频,文件名后缀为.flv
# 两种写法作用相同
fourcc = cv2.VideoWriter_fourcc('I', '4', '2', '0')
fourcc = cv2.VideoWriter_fourcc(*'I420')
一般情况下,视频保存为以上几种格式即可。
二、选择用本地或网络摄像头拍摄视频并保存
摄像头拍摄的视频一般都是三通道(RGB)的,所以直接保存没有问题
def webcam_save_fun(video_pathname, video_name, fps):
cap = cv2.VideoCapture(0)
fourcc = cv2.VideoWriter_fourcc('I', '4', '2', '0')
out = cv2.VideoWriter(video_pathname+'/'+video_name, fourcc, fps, (640, 480))
while cap.isOpened():
ret, frame = cap.read()
out.write(frame)
cv2.imshow('img', frame)
if cv2.waitKey(1) == 27:
break
cap.release()
out.release()
cv2.destroyAllWindows()
三、读取本地文件夹下的有序图像序列并保存为视频
由于我的图片是1通道的灰度数据,所以不能保存或打不开文件,
在读取的时候,要将灰度图转为3通道的RGB图
# 图片转视频
def image_to_video_fun(image_pathname, video_pathname, video_name, fps):
# image_pathname: 图像保存地址
# video_pathname: 视频地址
# video_name: 视频名
# fps: 帧率
# eg:image_pathname = 'E:\\program_study\\paperdata\\0710-1430-40'
# video_pathname = 'try.avi'
file_list = os.listdir(image_pathname)
# 此处必须sort,因为读取的文件顺序按照字符串ASSIC码排序而非数字。
file_list.sort(key=lambda x: int(x.split('_')[1].split('.')[0]))
fourcc = cv2.VideoWriter_fourcc('I', '4', '2', '0')
videoWriter = cv2.VideoWriter(video_pathname+'/'+video_name, fourcc, fps, (480, 480))
for file_name in file_list:
img = cv2.imread(file_path + '/' + file_name, 1)
videoWriter.write(img)
videoWriter.release()
tips:
cv2.imread(“img”.jpg, flag)
此处的flag 必须明白,不能乱写,
flag = -1, 8位深度,原通道,此时读取的是原来的图像
flag = 0, 8位深度,1通道,读取的是灰度图
flag = 1, 8位深度,3通道彩图
flag = 2, 原深度, 灰度
flag = 3,原深度,彩图
flag = 4, 8位深度, 3通道彩图
以上是关于cv2.VideoWriter 保存图像为视频的几个问题的主要内容,如果未能解决你的问题,请参考以下文章
如何在 cv2.VideoWriter 中使用 FPS 参数?