python 批量图片resize代码——分别3种库函数实现

一.1.opencv:      cv2

'cv2'
import cv2
import os
import glob

path = r'C:\Users\87419\Desktop\cg1\img\*.jpg'
for i in glob.glob(path):
    im1 = cv2.imread(i)
    im2 = cv2.resize(im1,(256,256))
    cv2.imwrite(os.path.join(r'C:\Users\87419\Desktop\cg1\resize',os.path.basename(i)),im2)

2.matplotlib :  from matplotlib import pyplot as plt

'plt, PIL '
'plt本身无法实现resize, 故不推荐此方法(得到的图是带白边的)'
import matplotlib.pyplot as plt
import os
import glob
from PIL import Image

path = r'C:\Users\87419\Desktop\cg1\img\*.jpg'
for i in glob.glob(path):
    im1 = Image.open(i)
    im2 = im1.resize((256,256))

    plt.imshow(im2)
    plt.axis('off')
    plt.savefig(os.path.join(r'C:\Users\87419\Desktop\cg1\resize',os.path.basename(i)))

3. PIL:  from PIL import Image

'PIL'
from PIL import Image
import os
import glob

path = r'C:\Users\87419\Desktop\cg1\img\*.jpg'
for i in glob.glob(path):
    im1 = Image.open(i)
    im2 = im1.resize((256,256))
    im2.save(os.path.join(r'C:\Users\87419\Desktop\cg1\resize',os.path.basename(i)))

 可能会遇到报错 OSError: cannot write mode P as JPEG

解决方法  如下(其余格式报错同理,按 if img.mode == "P" or img.mode == "RGBA":  统一转为RGB就可以了)

import os
from PIL import Image

def resize_image():
    # 获取输入文件夹中的所有文件
    files = os.listdir(r'C:\Users\admin\Desktop\drone\beijing')
    output_dir = r'C:\Users\admin\Desktop\drone\bj_416'

    if not os.path.exists(output_dir):
        os.makedirs(output_dir)

    for file in files:
        img = Image.open(r'C:\Users\admin\Desktop\drone\beijing/' + file)
        if img.mode == "P" or img.mode == "RGBA":
            img = img.convert('RGB')
        img = img.resize((416, 416), Image.ANTIALIAS)
        img.save(os.path.join(output_dir, file))

resize_image()

 详解见  https://blog.csdn.net/z704630835/article/details/84968767

二.按指定图像位置裁剪

以按中心位置抠出128*128大小为例:

import os
import cv2

# 遍历指定目录,显示目录下的所有文件名
def CropImage4File(filepath, destpath):
    pathDir = os.listdir(filepath)  # list all the path or file  in filepath
    for allDir in pathDir:
        child = os.path.join(filepath, allDir)
        dest = os.path.join(destpath, allDir)

        if os.path.isfile(child):
            image = cv2.imread(child)
            sp = image.shape  # obtain the image shape
            sz1 = sp[0]  # height(rows) of image
            sz2 = sp[1]  # width(colums) of image         
            a = int(sz1 / 2 - 600)  # x start
            b = int(sz1 / 2 + 300)  # x end
            c = int(sz2 / 2 - 450)  # y start
            d = int(sz2 / 2 + 450)  # y end
            cropImg = image[a:b, c:d]  # crop the image
            cv2.imwrite(dest, cropImg)  # write in destination path

if __name__ == '__main__':
    filepath = r'C:\Users\admin\Desktop\1\01'  # source images
    destpath = r'C:\Users\admin\Desktop\1\02'  # resized images saved here
    CropImage4File(filepath, destpath)

'cv2'
import cv2
import os
import glob

path = r'C:\Users\admin\Desktop\1\02\*.jpg'
for i in glob.glob(path):
    im1 = cv2.imread(i)
    im2 = cv2.resize(im1, (128, 128))
    cv2.imwrite(os.path.join(r'C:\Users\admin\Desktop\1\r_128', os.path.basename(i)), im2)

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值