繁体   English   中英

使用 glob 从图像构建电影时反转文件顺序

[英]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()

您可以按照此答案并使用natsort模块:

>>> 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM