[英]reverse file order in using glob for building a movie from images
我正在使用此代码片段(如下)从文件夹中构建图像电影。 图像命名如下...GS_FE_1.png, GS_FE_2.png, GS_FE_3.png,我想确保图像以 REVERSE /Descing 使用,以便电影的第一帧将是文件FE_ 之后的数字最大。 “FE_”将始终是该值的前身。 任何想法将不胜感激!
import cv2
import numpy as np
import glob
frameSize = (2108, 1410)
out = cv2.VideoWriter(r'C:\Users\jay\Desktop\output_video.avi',cv2.VideoWriter_fourcc(*'DIVX'), 60, frameSize)
for filename in glob.glob(r'C:\Users\jay\Desktop\Images\*.png'):
img = cv2.imread(filename)
out.write(img)
out.release()
>>> from natsort import natsorted
>>> natsorted(['asdf123', 'asdf1234', 'asdf111', 'asdf124'])
['asdf111', 'asdf123', 'asdf124', 'asdf1234']
如果 case 更复杂并且文件名包含一些不同的数字,但您想在FE_
之后使用特定的数字,则可以选择正则表达式。
我不是这个领域的大专家,但使用链接的答案得到了以下解决方案:
import re
key_pattern = re.compile(r'([^\?]*)FE_(\d*)')
def sorting_key(item):
m = key_pattern.match(item)
return int(m.group(2)) # m.group(2) is string representation of number after FE
可以用作:
sorted(names, key=sorting_key, reverse=True)
使用合成名称对其进行了测试:
>>> names = [f'GS_FE_{i}.png' for i in range (100)]
>>> sorted(names, key=sorting_key, reverse=True)
['GS_FE_99.png',
'GS_FE_98.png',
'GS_FE_97.png',
...
由于图像命名是统一的,您可以执行以下操作:
sorted(filenames, key=lambda x:int(x.split('_')[-1].split('.')[-2]), reverse=True)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.