Python:图像迭代错误

Python: wrong iteration through images

我有一个包含 196 张 .jpg 图片的文件夹。 使用以下代码,我可以从这些图像中创建一个 mp4 视频。

代码有效,我可以观看视频:

import cv2
import os

image_folder = 'im/img_jpg/'
video_name = 'video.mp4'

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

fourcc = cv2.VideoWriter_fourcc(*'XVID')
video = cv2.VideoWriter(video_name, fourcc, 20.0, (width,height))

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

cv2.destroyAllWindows()
video.release()

但是现在我运行遇到了问题。视频不正确,因为图像顺序不正确。 打印 "images" 看起来像这样:

print(images)
['00000158.jpg', '00000164.jpg', '00000170.jpg', '00000038.jpg', '00000010.jpg', ...

应该是:

['00000001.jpg', '00000002.jpg', '00000003.jpg', '00000004.jpg', '00000005.jpg', ...

我做错了什么?

os.listdir returns 任意顺序的文件名,您可以调用 images.sort() 以便对它们进行排序。

只需使用 sorted() 函数对列表中的项目进行排序。我记得,当您使用 os 模块列出项目时,它们的排序方式与您在资源管理器中看到的方式相同。

尝试:

images = sorted([img for img in os.listdir(image_folder) if img.endswith(".jpg")])