0%

图片转视频

使用python的cv2库完成图片转视频,解决灰度图片和中文路径问题

先上代码

img2video.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import cv2
import numpy as np
import glob
import os

img_array = []
# 取图片的时候排序
for filename in sorted(glob.glob(r'***\0X1AA30623C1AE4641\*.png'), key=lambda x: int(x.split('.')[0].split('_')[-1])):
# 注意读图方式
img = cv2.imdecode(np.fromfile(filename, dtype=np.uint8), 1)
img_array.append(img)


height, width, channel = img_array[0].shape
size = (width, height)

# avi:视频类型,mp4也可以
# cv2.VideoWriter_fourcc(*'I420'):编码格式
# 50:视频帧率
# size:视频中图片大小
out = cv2.VideoWriter(r'***\0X1AA30623C1AE4641_predict.avi',
cv2.VideoWriter_fourcc(*'I420'),
50, size)

for img in img_array:
out.write(img)

out.release()

中文路径

cv2在读取带有中文路径图片的时候不能直接使用cv2.imread(),读出来是None。需要使用cv2.imdecode(np.fromfile(filepath, dtype=np.uint8), -1),注意后面的数字带有具体含义,下面将灰度图的时候说明。

灰度图片

cv2.imdecode(np.fromfile(filepath, dtype=np.uint8), flag=-1)

此处的flag带有明确含义:

  • flag = -1, 8位深度,原通道,此时读取的是原来的图像
  • flag = 0, 8位深度,1通道,读取的是灰度图
  • flag = 1, 8位深度,3通道彩图
  • flag = 2, 原深度, 灰度
  • flag = 3,原深度,彩图
  • flag = 4, 8位深度, 3通道彩图

我最终的结果是一张灰度图,需要读成三通道彩图才能进行保存,注意cv2读出来的是BGR而不是RGB,只要中途不经过PIL之类的转化,直接再cv2.VideoWriter的话其实不影响。

-------------本 文 结 束 啦 感 谢 您 的 阅 读-------------

欢迎关注我的其它发布渠道