python版本是3.6
OpenCV是3.4.1
OpenCV在读取图片方面使用很方便,主要会用到imread()、imwrite()、imdecode()、imencode()
代码如下
import cv2
import os
def Image_Resize(dir): #输入起始路径
for parent,dirnames,filenames in os.walk(dir): # 三个参数:分别返回1.父目录 2.所有文件夹名字(不含路径) 3.所有文件名字
for filename in filenames:
img_path=os.path.join(parent,filename) #os.path.join(a,b) 合并路径
save_path=os.path.join(' ',filename) #以原名称存在某一位置
img=cv2.imread(img_path)
dim=(256,256) #规定像素大小
resized=cv2.resize(img,dim,interpolation = cv2.INTER_AREA) #采用的差值方法是INTER_LINEAR
cv2.imwrite(save_path,resized)
Image_Resize(' ')
以上是使用imread 和imwrite进行批处理图片的大小,但是要注意,这两个函数无法处理路径中含有中文的图片,而且opencv在读取图片时不会报错,只会使得读
入得数据为none。
在处理含有中文路径的图片时,应采用imdecode(解码)和imencode(编码)
代码如下:
import os
import cv2 as cv2
import numpy as np
def cv_imread(file_path): #为了方便,把它又定义成了了一个函数,方便调用
cv_img=cv2.imdecode(np.fromfile(file_path,dtype=np.uint8),-1)
return cv_img
def img_resize(filepath):
for parent, dirnames, filenames in os.walk(filepath): # 三个参数:分别返回1.父目录 2.所有文件夹名字(不含路径) 3.所有文件名字
for filename in filenames:
img_path =os.path.join(parent,filename) #将父目录和名字组合到一起形成访问路径
savepaths=os.path.join('D:/NEW_DATA1',filename)
img=cv_imread(img_path) # 读取图片
res=cv2.resize(img,(128,64),interpolation=cv2.INTER_AREA ) #改变图片尺寸
cv2.imencode('.jpg',res)[1].tofile(savepaths)
img_resize('D:/rest_picture')