PYTHON 自动化办公:更改图片尺寸大小
1. 前言
在之前的文章中,介绍了图片的压缩技术,这里讲解如何利用python批量将图片改为指定后缀的格式。当然,也可以为深度学习批量更改文件后缀,例如在分割中,可能需要img和mask的图片名称完全一致等等
如有需要,参考本专栏其他博文
2. 单张图片更改尺寸
代码如下:
因为有的图片名称很长,甚至中途还会将后缀出现,例如 sda1233pngddwsa.png
但无论怎样风骚的文件名,不可能出现带 . + 后缀 的字符串,因为会直接报错。所以这里image_format 列表文件名都加了 . 方便遍历
import cv2
def main(img_path, size=(256,256)):
image_format = ['.jpg', '.jpeg', '.png', '.gif', '.bmp', '.tiff', '.ai', '.cdr', '.eps'] # 常见的图片后缀名
for i in image_format:
if i in img_path:
ret_path = img_path.split(i)[0] # 文件名
ret_path = ret_path + '.jpg' # 返回的图片名
img =cv2.imread(img_path)
img = cv2.resize(img,size)
cv2.imwrite(ret_path,img)
if __name__ == '__main__':
root = 'a.jpg' # 传入图片的路径
img_size = (256,256) # size
main(img_path=root, size=img_size)
3. 单个目录下所有图片更改
将所有需要更改的图片放在同一目录下即可:
import cv2
import os
from tqdm import tqdm
def main(folder_path,size=(256,256)):
ret_folder_path = folder_path + '_ret' # 返回父目录
if not os.path.exists(ret_folder_path): # 建立目录
os.makedirs(ret_folder_path)
img_path = [i for i in os.listdir(folder_path)] # 所有图片路径
for i in tqdm(img_path):
img = os.path.join(folder_path, i)
img = cv2.imread(img) # 打开图片
img = cv2.resize(img,size)
cv2.imwrite(os.path.join(ret_folder_path, i),img)
if __name__ == '__main__':
root = 'test' # 多个图片的父目录
size = (256,256)
main(folder_path=root,size=size)
4. 多个目录下图片更改
要将多个目录放在一个大的父目录下:
import cv2
import os
from tqdm import tqdm
def main(img_path, img_fm,size):
image_format = ['.jpg', '.jpeg', '.png', '.gif', '.bmp', '.tiff', '.ai', '.cdr', '.eps'] # 常见的图片后缀名
# 返回的新目录
ret_folder_path = img_path + '_ret'
if not os.path.exists(ret_folder_path):
os.makedirs(ret_folder_path)
sub_folder = [i for i in os.listdir(img_path)]
for sf in tqdm(sub_folder):
os.makedirs(os.path.join(ret_folder_path, sf))
for i in os.listdir(os.path.join(img_path, sf)): # 图片名
for j in image_format:
if j in i:
ret_path = i.split(j)[0] # 文件名
ret_path = ret_path + '.' + img_fm # 返回的图片名
try:
img = cv2.imread(os.path.join(img_path, sf, i))
img = cv2.resize(img,size)
cv2.imwrite(os.path.join(ret_folder_path, sf, ret_path),img)
except:
pass
if __name__ == '__main__':
root = 'test' # 传入图片文件夹目录
img_format = 'jpg' # 待更改的后缀格式 jpg png jpeg ...
size = (300,300)
main(img_path=root, img_fm=img_format,size=size)