方法1:利用glob模块批量读入图片是最合适的。
import glob
import cv2
import numpy as np
b= glob.glob(r"D:/pictureSim2/*") #得到的b是一个文件名称的列表
print(b)
#['D:/pictureSim2\\1.1.png', 'D:/pictureSim2\\1.jpg', 'D:/pictureSim2\\10.1.jpeg', 'D:/pictureSim2\\10.2.jpg']
for i in range(len(b)):
img = cv2.imread(b[i],0)
cv2.imwrite('D:/pictureSim3/%d.jpg'%i,img)
方法2:使用os模块
import os
path = r"D:/pictureSim2" #文件和目录名
names = os.listdir(path) #返回指定目录下的所有文件名称
print(names)
#文件名称的列表
#['1.1.png', '1.jpg', '10.1.jpeg', '10.2.jpg']
image_paths = []
for name in names:
image_path = os.path.join(path, name) ##连接目录与文件名或目录 结果为path/name
image_paths += [image_path]
print(image_paths)
#['D:/pictureSim2\\1.1.png', 'D:/pictureSim2\\1.jpg', 'D:/pictureSim2\\10.1.jpeg', 'D:/pictureSim2\\10.2.jpg']
接下来就可以对图像文件进行处理了。有个缺点是返回了整个文件下的所有的文件,可能包括不是图像文件的其他文件,这样后面的图像处理可能会错。
可以简单的过滤一下。
方法3:也是使用os + glob模块
import numpy as np
import cv2
from os.path import dirname, join, basename
from glob import glob
num=0
print (dirname(__file__)) #当前工作路径
for fn in glob(join(dirname(__file__)+'\other', '*.jpg')):
print fn