python遍历文件夹循环处理图片
需求分析:目前我有一个文件夹,文件夹下存放了各种图片数据,我需要对图片数据进行一些参数调整、图像处理和检测。我需要调整一个参数后直接遍历处理所有的图片,返回所有的处理结果,而不是调整完参数一个一个测试效果好不好。之前的方法是:cv2.imread("路径/图像名.png"),然后进行相应的处理img = cv2.imread("dataset1/shiban1/cut/1417_003.png")
需求分析:
目前我有一个文件夹,文件夹下存放了各种图片数据,我需要对图片数据进行一些参数调整、图像处理和检测。我需要调整一个参数后直接遍历处理所有的图片,返回所有的处理结果,而不是调整完参数一个一个测试效果好不好。
之前的方法是:cv2.imread("路径/图像名.png"),然后进行相应的处理
img = cv2.imread("dataset1/shiban1/cut/1417_003.png")
plt.imshow(img)
plt.show()
这里就简单举个例子,dataset1下有一些文件夹,我要读取shiban1/cut下的32张图像
至于图像处理和检测这些操作,就以plt展示图片的代码代替
这样的方法,每次处理完一张图片都要改一下图像名字,比如改成1417_004.png才能处理下一张图像。这对于我进行调参测试效率太低了。
所以,就找了一下遍历文件夹的代码,对我的程序进行修改:
首先在Utils.py里放入遍历代码
#遍历文件夹
def getFileList(dir, Filelist, ext=None):
"""
获取文件夹及其子文件夹中文件列表
输入 dir:文件夹根目录
输入 ext: 扩展名
返回: 文件路径列表
"""
newDir = dir
if os.path.isfile(dir):
if ext is None:
Filelist.append(dir)
else:
if ext in dir[-3:]:
Filelist.append(dir)
elif os.path.isdir(dir):
for s in os.listdir(dir):
newDir = os.path.join(dir, s)
getFileList(newDir, Filelist, ext)
return Filelist
然后在主程序中进行调用遍历,首先看看能不能遍历到,如果可以的话顺带输出一下imglist
org_img_folder = './dataset1/shiban1/cut'
imglist = Detection_Utils.getFileList(org_img_folder, [], 'png')
print('本次执行检索到 ' + str(len(imglist)) + ' 张图像\n')
print(imglist)
能看到,是可以遍历该文件夹下所有图像数据的
并且它返回的是一个数组类型的路径列表,但是我发现文件名前面的是 \\ ,这个肯定是读不出的
所以我接下来可以取出它的文件名,自己附上路径
for imgpath in imglist:
imgname = os.path.splitext(os.path.basename(imgpath))[0]
print(imgname)
for imgpath in imglist:
imgname = os.path.splitext(os.path.basename(imgpath))[0]
#print(imgname)
print("dataset1/shiban1/yuan/" + imgname + ".png")
完整的main函数中调用代码如下:
if __name__=='__main__':
org_img_folder = './dataset1/shiban1/cut'
imglist = Detection_Utils.getFileList(org_img_folder, [], 'png')
#print('本次执行检索到 ' + str(len(imglist)) + ' 张图像\n')
#print(imglist)
for imgpath in imglist:
imgname = os.path.splitext(os.path.basename(imgpath))[0]
#print(imgname)
#print("dataset1/shiban1/cut/" + imgname + ".png")
imgpath = "dataset1/shiban1/cut/" + imgname + ".png"
img = cv2.imread(imgpath)
plt.imshow(img)
plt.show()
最后,确实是会依次的给我展示cut文件夹下的所有图像。接下来我只要把 plt的两行代码换成我所需要的图像处理和检测代码即可。
更多推荐
所有评论(0)