python3+OpenCV批处理图片

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')

你可能感兴趣的:(OpenCV)