使用Python将图片缩放到指定像素
在使用python进行图像处理或使用一些深度学习的模型的时候,对图片的像素大小有指定要求,例如我最近使用的一个模型就要求输入图像的像素必须为512*512,使用windos自带的画图工具或者ps等专业工具是可以进行处理的,但太慢了,也太麻烦了,使用python脚本就可以实现一键智能化处理
直接贴源码吧,使用的是opencv的库,很简单:
import argparse
import os
import cv2
import sys
# 定义图像缩放函数
def process_image(img, min_side):
size = img.shape
h, w = size[0], size[1]
# 长边缩放为min_side
scale = max(w, h) / float(min_side)
new_w, new_h = int(w / scale), int(h / scale)
resize_img = cv2.resize(img, (new_w, new_h))
# 填充至min_side * min_side
if new_w % 2 != 0 and new_h % 2 == 0:
top, bottom, left, right = (min_side - new_h) / 2, (min_side - new_h) / 2, (min_side - new_w) / 2 + 1, (
min_side - new_w) / 2
elif new_h % 2 != 0 and new_w % 2 == 0:
top, bottom, left, right = (min_side - new_h) / 2 + 1, (min_side - new_h) / 2, (min_side - new_w) / 2, (
min_side - new_w) / 2
elif new_h % 2 == 0 and new_w % 2 == 0:
top, bottom, left, right = (min_side - new_h) / 2, (min_side - new_h) / 2, (min_side - new_w) / 2, (
min_side - new_w) / 2
else:
top, bottom, left, right = (min_side - new_h) / 2 + 1, (min_side - new_h) / 2, (min_side - new_w) / 2 + 1, (
min_side - new_w) / 2
pad_img = cv2.copyMakeBorder(resize_img, int(top), int(bottom), int(left), int(right), cv2.BORDER_CONSTANT,
value=[255, 255, 255]) # 从图像边界向上,下,左,右扩的像素数目
return pad_img
def run(src='test.jpg',
dst='input.png',
size=512):
im = cv2.imread(src)
image_new = process_image(im, size)
cv2.imwrite(dst, image_new)
def parse_opt():
parser = argparse.ArgumentParser()
parser.add_argument('--src', type=str, default='test.jpg', help='input')
parser.add_argument('--dst', type=str, default='input.png', help='output')
parser.add_argument('--size', type=int, default=512, help='picture size')
opt = parser.parse_args()
return opt
def main(opt):
run(**vars(opt))
if __name__ == "__main__":
opt = parse_opt()
main(opt)
使用时可以直接通过
python.py --src 待转换图像 --dst 输出路径和文件名 --size 尺寸
来进行使用。
后来为了方便我还弄了一个自动处理的脚本,运行该脚本后,可以自动把input目录下的图片进行处理,之后放到output目录下。
使用自动处理脚本时需新建process()函数对缩放后的图像进行处理。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CpCuqtvO-1633782732290)(/upload/2021/10/image-53c457b5012e4706a5fa658a4f0f22aa.png)]
自动处理python脚本下载