Python图像处理:批量修改图片大小

665 阅读1分钟

批量修改图片大小

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import os
import cv2
import numpy as np


def cv_imread(filePath):
    # 核心就是下面这句,一般直接用这句就行,直接把图片转为mat数据
    cv_img=cv2.imdecode(np.fromfile(filePath,dtype=np.uint8),-1)
    # imdecode读取的是rgb,如果后续需要opencv处理的话,需要转换成bgr,转换后图片颜色会变化
    # cv_img=cv2.cvtColor(cv_img,cv2.COLOR_RGB2BGR)
    return cv_img


def resize_img(DATADIR, data_k, img_size):
    w = img_size[0]
    h = img_size[1]
    path = os.path.join(DATADIR, data_k)
    #返回path路径下所有文件的名字,以及文件夹的名字,
    img_list = os.listdir(path)
    # print(img_list)
    print(path)
 
    for i in img_list:
        # if i.endswith('.jpg'):
        # 调用cv2.imread读入图片,读入格式为IMREAD_COLOR
        # img_array = cv2.imread(path + '/' + i, cv2.IMREAD_COLOR)
        img_array = cv_imread(path + '/' + i)
        print(path + '/' + i)
        # 调用cv2.resize函数resize图片
        new_array = cv2.resize(img_array, (w, h), interpolation=cv2.INTER_CUBIC)
        img_name = str(i)
        '''生成图片存储的目标路径'''
        save_path = path + '_new/'
        if os.path.exists(save_path):
            print(i)
            '''调用cv.2的imwrite函数保存图片'''
            save_img=save_path+img_name
            # cv2.imwrite(save_img, new_array)
            '''带有中文名称用imencode保存'''
            cv2.imencode('.jpg', new_array)[1].tofile(save_img)
        else:
            os.mkdir(save_path)
            save_img = save_path + img_name
            # cv2.imwrite(save_img, new_array)
            cv2.imencode('.jpg', new_array)[1].tofile(save_img)
 
 
if __name__ == '__main__':
    #设置图片路径
    DATADIR = "C:/Users/Desktop/img/"
    data_k = 'img'
    img_size = [1000, 1000]
    resize_img(DATADIR, data_k, img_size)

遇到问题

  1. opencv读取带有中文的图片时会报错,这里单独写了cv_imread()函数进行处理。如果文件读取路径中不含中文,调用cv2.imread()。
  2. 保存图像时,若也还有中文,需要使用cv2.imencode()保存,同样,若保存路劲不含中文,调用cv2.imwrite()。