繁体   English   中英

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

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

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

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])

这是 output

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开始的。

这是排序后的输入 using.sorted() function。

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,除非是一个满意的用户。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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