python - 如何修复以随机顺序写入视频的图像
问题描述
我正在尝试将 271 张已经按数字顺序排列的模拟图像('0.jpg'、'1.jpg'、...、'271.jpg')写入视频。cv2.videoWriter 似乎正在以随机顺序写入所有这些图像,产生的视频与模拟中应该发生的情况不一致。
我已经尝试过 using glob
,它产生与 using 相同的结果os.path
import numpy as np
import os
from os.path import isfile, join
pathIn= 'path/simulation/'
pathOut = 'video.avi'
fps = 10
frame_array = []
files = [f for f in os.listdir(pathIn) if isfile(join(pathIn, f))]
# for sorting the file names properly
files.sort(key = lambda x: x[5:-4])
files.sort()
frame_array = []
files = [f for f in os.listdir(pathIn) if isfile(join(pathIn, f))]
for i in range(len(files)):
filename=pathIn + files[i]
# reading each file
img = cv2.imread(filename)
height, width, layers = img.shape
size = (width,height)
# inserting the frames into an image array
frame_array.append(img)
out = cv2.VideoWriter(pathOut,cv2.VideoWriter_fourcc(*'DIVX'), fps, size)
for i in range(len(frame_array)):
# writing to a image array
out.write(frame_array[i])
out.release()
图像转换为视频的预期顺序:
'0.jpg', '1.jpg', ... '271.jpg'
实际结果:
'31.jpg', '230.jpg', '12.jpg', ...
解决方案
有两个问题
files.sort(key = lambda x: x[5:-4])
files.sort()
首先,'0.jpg'[5:-4]
产生一个空字符串。我想你想要类似的东西
file.sort(key = lambda x: int(x[:-4]))
其次,您通过再次排序丢弃了结果。放弃第二种。
推荐阅读
- typescript - 带有通用键和常规键的打字稿对象?
- postgresql - 特定元素的 JSONB 数组更新
- python - 将函数应用于 DataFrame 列的字典理解
- excel - excel vba userform设置数量值不能小于0
- javascript - Testcafe Selector 没有在 React Modal 中获取元素
- c# - 如何计算所有元素都是字符串的矩阵的行列式?
- api - 认证微服务解耦
- tfs - 是否可以为本地 TFS 2018 设置代理发布代理?
- reactjs - 静态服务的 create-react-app 是否可以使用 react-router browserHistory *并且*完全保持客户端(在路由上没有网络获取,没有 SSR)
- mysql - 插入地图
进入 MySQL JSON 列