对一个文件夹下的图片进行批量缩放(resize)处理

问题背景

使用GPU训练时,有时出现了图片太大,导致处理起来速度慢或内存不够崩掉的情况,因此需要对原图片进行缩放。
本文介绍了批量处理的方法,成功将一个文件下的所有图片(较大)都resize至512*512像素。

环境配置

首先需要安装cv库
方法:

pip install opencv-python

速度慢或者安装不上可以试试:

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple/ opencv-python
pip install -i https://pypi.mirrors.ustc.edu.cn/simple/ opencv-python

完整代码

import os
import cv2

content_dirs = []
resize_img_dir = 'resize_pic/'
if os.path.exists(resize_img_dir):
    pass
else:
    os.makedirs(resize_img_dir)

def read_directory(directory_name):
    for filename in os.listdir(r"./" + directory_name):
        content_dirs.append(filename)
    return content_dirs


def main():
    Process_dir = 'source'#这里换成你需要resize的图片文件夹名
    print("-------------begin resize process-------------")
    c_dirs = read_directory(Process_dir)
    for c_dir in c_dirs:
        pro_dir = Process_dir+'/'+c_dir
        img_array = cv2.imread(pro_dir, cv2.IMREAD_COLOR)
        resize_img = cv2.resize(img_array, (512, 512), interpolation=cv2.INTER_CUBIC)
        print("successfully resize "+c_dir)
        cv2.imwrite(resize_img_dir+c_dir, resize_img)
    return c_dirs


if __name__ == '__main__':
    main()
    print("-------------resize process finished-------------")
    print("-------------请在resize_pic文件夹下获取resize后的图片-------------")



代码解释

def read_directory(directory_name):
    for filename in os.listdir(r"./" + directory_name):
        content_dirs.append(filename)
    return content_dirs

这段代码返回同一个文件夹下所有图片的名称。

def main():
    Process_dir = 'content'#这里可以把'content'换成你的那个包含所有图片的文件夹名
    print("-------------begin resize process-------------")
    c_dirs = read_directory(Process_dir)
    for c_dir in c_dirs:
        pro_dir = Process_dir+'/'+c_dir
        img_array = cv2.imread(pro_dir, cv2.IMREAD_COLOR)
        resize_img = cv2.resize(img_array, (512, 512), interpolation=cv2.INTER_CUBIC)#512,512可以换为1024*1024或其他别的
        print("successfully resize "+c_dir)
        cv2.imwrite(resize_img_dir+c_dir, resize_img)
    return c_dirs

这段代码用于将’content_pic’文件夹下面所有的图片resize为(512,512)大小。处理完之后全部保存在resize_img_dir对应的文件夹下,图片名称不变。
1.512,512可以更换为你需要的大小,比如1024*1024
2.这里可以把"content"换成你的设备上包含图片的文件夹名字。注意!这里使用的是绝对路径。

另一种更简单的写法

from PIL import Image
import os

# 设置新尺寸
new_size = (512, 512)

# 获取当前文件夹路径
folder_path = os.getcwd()

# 遍历文件夹中的所有文件
for filename in os.listdir(folder_path):
    # 如果是图片文件
    if filename.endswith(".jpg") or filename.endswith(".jpeg") or filename.endswith(".png"):
        # 打开图片文件
        with Image.open(os.path.join(folder_path, filename)) as img:
            # 将图片调整为新尺寸
            img = img.resize(new_size, resample=Image.LANCZOS)
            # 保存图片文件
            img.save(os.path.join(folder_path, filename))

把这个python文件放在包含图片的文件夹中,直接运行,将会直接修改当前文件夹下所有图片的尺寸至(512*512)。

批量图片缩小工具,JPG|PNG|BMP图片缩小工具 可以选择图片质量的清晰度,图片质量越高图片越清晰,文件也越大。(下载后如果不是ImageZoom.rar,请加上后缀名.rar然后解压.) 使用说明:把ImageZoom.exe复制到要缩小的图片文件夹里并运行,输入最大宽或最大高其中一个值,单位为像素(pix); 最大宽就是:缩小后图片最大的宽度;最大高就是缩小后图片最大的高度。 当输入的最大宽和高和实际图片实际的宽和高不成比率的时候,软件自动判断按照输入的宽或高对图片进行等比缩小。 软件运行成功后会在软件所在的目录下建立个lantou.net文件夹保存缩小后的图片!不影响原先图片。 如果选择“强制按照输入的宽和高缩小图片!”(多余的位置填充白色或透明,PNG格式保留透明底色) 则软件将把实际图片缩小到适合这个强制的宽和高度后,把缩小后的图片填充上去,上下左右剩下的地方用白色填充(PNG格式保留透明底色)。 PNG格式图片如果原先是透明底色,则所有操作后仍然是透明底色! 使用须知: 1、本程序不支持对GIF图片的缩小! 2、包含图片缩小和图片转换(BMP转换为JPG)两功能。 3、缩小后的宽和高必须输入其中一个! 4、如果输入的宽和高都>=图片本身尺寸,则对图片不进行缩小操作! 5、如果输入的宽小于图片实际的宽,输入的高大于图片实际的高,则对图片按输入的宽等比缩小! 6、如果输入的宽大于图片实际的宽,输入的高小于图片实际的高,则对图片按输入的高等比缩小! 7、如果输入的两者都小于图片实际的,如果输入的宽/图片的宽大于输入的高/图片的高,则按照输入的高等比缩小!反则按照输入的宽等比缩小! 8、如果想给操作后的图片和源图片文件名不一样,请勾上“缩小或转换文件后加前缀名”后再操作,软件会自动为每一个图片在文件名前加“_“符号区分。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值