如何在没有排序功能的情况下连续读取文件中的图像?
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,除非是满意的用户。
我是图像处理的新手,我从视频中捕获帧,我想将它们转换成数组。这些帧必须是连续的。 这是我的代码的一部分
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,除非是满意的用户。