如何在没有排序功能的情况下连续读取文件中的图像?

How to read images in a file consecutively without sort functions?

我是图像处理的新手,我从视频中捕获帧,我想将它们转换成数组。这些帧必须是连续的。 这是我的代码的一部分

folder = "/content/otherGrayscaleImage"
onlyfiles = [f for f in os.listdir(folder) if os.path.isfile(os.path.join(folder, f))]

print("Working with {0} images".format(len(onlyfiles)))

for i in range(len(onlyfiles)):
    #do something
    print(onlyfiles[i])

这是输出

Working with 328 images
241.png
312.png
27.png
149.png
42.png
296.png
182.png
99.png
64.png
120.png
102.png
208.png
79.png
325.png
......

如您所见,我的输出打印是随机的,并不是从我的第一张图片开始的,即 1.png.

这里是使用 .sorted() 函数排序的输入。

1.png
10.png
100.png
101.png
.
.
199.png
2.png

我的最终目标是将 64 个连续的 2d 图像数组转换为 3d 数组,以实现 python 应该连续读取我的图像;但事实并非如此。

我应该如何连续读取文件中的图像?

PS: 使用排序函数如 sorted() 没有帮助

您需要自定义排序键。手动解决方案是这样的:

onlyfiles.sort(key=lambda x: int(x[:x.index('.')]))

这不是一个可靠的解决方案。如果您有任何文件在扩展名之前没有整数,或者缺少扩展名,这将引发错误。

幸运的是,有一个名为 natsort 的库可以很好地捕获人工排序的极端情况。在pip install natsort之后,你可以做

from natsort import natsorted

onlyfiles = natsorted(onlyfiles)

强制免责声明:我不隶属于 natsort,除非是满意的用户。