问题背景
使用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)。