在 python 中创建视频时如何保留图像的顺序

Ari*_*ris 1 python opencv natural-sort

我需要用 python 中的图像序列创建一个视频。我在网上发现这段代码工作正常,但在用 python 读取图像时,我遇到了一个小问题。即使文件夹中的顺序没问题。例如,frame100.jpg,frame101.jpg,frame102.jpg,.....,frame1000,frame1001,...当我在循环内用python读取它们时,调试后我看到以下'frame100.jpg','帧1000.jpg','帧1001.jpg','帧1002.jpg',......,帧101,帧1010,帧1011......

这是代码

def images_to_video():

image_folder = 'data_out'


images = [img for img in os.listdir(image_folder) if img.endswith(".jpg")]
frame = cv2.imread(os.path.join(image_folder, images[0]))
height, width, layers = frame.shape

video = cv2.VideoWriter('project.avi',cv2.VideoWriter_fourcc(*'DIVX'), 15, (width,height))


for image in images:
    video.write(cv2.imread(os.path.join(image_folder, image)))


cv2.destroyAllWindows()
video.release()
Run Code Online (Sandbox Code Playgroud)

aba*_*bak 5

您需要使用知道如何对数字进行排序的自然排序来对文件名进行排序:

import re

def natural_sort_key(s, _nsre=re.compile('([0-9]+)')):
    return [
        int(text)
        if text.isdigit() else text.lower()
        for text in _nsre.split(s)]

sorted_images = sorted(images, key=natural_sort_key)

Run Code Online (Sandbox Code Playgroud)