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")])
我有一个包含 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")])