在大批量处理数据集图片时,使用Python中的os.listdir(),发现读取的图片不是按照预想的顺序读取,是乱序的,这… … … …忍不了,为了解决这个问题,总结了Python 按照图片名称顺序(升序)读取文件夹中图片处理的方法。
乱序的样纸
直接使用os.listdir()读取处理后乱序的样纸如下:
解决办法
首先图片名称得是有序的,具体关于批量修改图片名的方法,参考另外一篇博客添加链接描述
加入下面这条代码即可有序读取图片处理:
file.sort(key=lambda x:int(x.split('.')[0]))
示例代码
具体的位置见下:
file = os.listdir(path=input_dir)
file.sort(key=lambda x:int(x.split('.')[0]))
for item in file:
img = cv2.imread(os.path.join(input_dir, item),cv2.IMREAD_GRAYSCALE)
下面是一段使用局部直方图均衡化方法,按图片名顺序批量处理文件夹中图片的例子:
import cv2
import os
import sys
# 需要读取的路径
input_dir = 'runs/detect/INF_2023.3.3_405_Original_select2 Extract/roi'
output_dir = 'runs/detect/INF_2023.3.3_405_Original_select2 Extract/roi Enhanse Enhance'
if not os.path.exists(output_dir):
os.makedirs(output_dir)
index = 1
file = os.listdir(path=input_dir)
# file.remove('.DS_Store')
file.sort(key=lambda x:int(x.split('.')[0]))
for item in file:
img = cv2.imread(os.path.join(input_dir, item),cv2.IMREAD_GRAYSCALE)
print('Being processed picture %s' % index+" "+item)
# 灰度转换
gray = img # cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 局部直方图均衡化处理
clahe = cv2.createCLAHE(clipLimit=2, tileGridSize=(10, 10)) ## 限制对比度自适应直方图均衡化
# 将灰度图像和局部直方图相关联, 把直方图均衡化应用到灰度图
result = clahe.apply(gray)
# 保存图片
cv2.imwrite(output_dir + '/' + str(index) + '.jpg', result)
index += 1
key = cv2.waitKey(30) & 0xff
if key == 27:
sys.exit(0)
按顺序处理后的样纸如下:
总结
以上就是使用Python按照图片名称顺序(升序)读取文件夹中图片处理方法,希望能帮助到学者,谢谢!