近两天刚好需要操作图片转视频,视频转图片小操作,在网上搜了一些博文发现会存在一些小bug。因此,在这里记录一下直接调好就可以使用的代码。
首先是图片转视频(使用对象:尺寸大小都一样的图片)
import os
import cv2
import numpy as np
path = './Output/' # 路径设置(ps:路径千万不要出现中文!)
filelist = os.listdir(path)
filelist = sorted(filelist) # 按照文件数字进行顺序排序
fps = 2 # 视频每秒24帧
size = (512, 512) # 需要转为视频的图片的尺寸
video = cv2.VideoWriter("VideoTest.avi", cv2.VideoWriter_fourcc(*'DIVX'), fps, size)
# 视频保存在当前目录下
for item in filelist:
if item.endswith('.png'):
# 找到路径中所有后缀名为.png的文件,可以更换为.jpg或其它
item = path + item
img = cv2.imread(item)
video.write(img)
video.release()
cv2.destroyAllWindows()
然后,还是图片转视频,使用对象改变(使用对象:图片尺寸大小不同)
import cv2
import glob
def resize(img_array, align_mode):
_height = len(img_array[0])
_width = len(img_array[0][0])
for i in range(1, len(img_array)):
img = img_array[i]
height = len(img)
width = len(img[0])
if align_mode == 'smallest':
if height < _height:
_height = height
if width < _width:
_width = width
else:
if height > _height:
_height = height
if width > _width:
_width = width
for i in range(0, len(img_array)):
img1 = cv2.resize(img_array[i], (_width, _height), interpolation=cv2.INTER_CUBIC)
img_array[i] = img1
return img_array, (_width, _height)
def images_to_video(path):
img_array = []
for filename in glob.glob(path + '/*.png'): #图片格式设置
img = cv2.imread(filename)
if img is None:
print(filename + " is error!")
continue
img_array.append(img)
# 图片的大小需要一致
img_array, size = resize(img_array, 'largest')
fps = 2 # 帧率设置
out = cv2.VideoWriter('demo.avi', cv2.VideoWriter_fourcc(*'DIVX'), fps, size)
for i in range(len(img_array)):
out.write(img_array[i])
out.release()
def main():
path = ".Output/" # 路径(千万不要带中文的路径!!!)
images_to_video(path)
if __name__ == "__main__":
main()
最后,我们来个视频转图片的代码!
import cv2
import numpy as np
# 定义保存图片函数
# image:要保存的图片名字
# addr;图片地址与相片名字的前部分
# num: 图片名字的后缀,int 类型
def save_image(image, addr, num):
address = addr + str(num) + '.jpg'
cv2.imwrite(address, image)
# 读取视频文件
videoCapture = cv2.VideoCapture("./232.avi")
# 读帧
success, frame = videoCapture.read()
i = 0
timeF = 40
j = 134
while success:
i = i + 1
if (i % timeF == 0):
j = j + 1
save_image(frame, '.\\0', j)
print('save image:', i)
success, frame = videoCapture.read()
好了,现在我们就已经可以实现图片与视频互相转换啦~~
参考链接:
图片转视频1
图片转视频2