python opencv压缩图片大小_python,opencv和PIL,resize图像大小,可以批处理

目录

引言

无论在深度学习还是其他图像处理中都需要固定大小的图像作为输入,本文主要使用cv2.resize批量重新设置图像大小。可以批量将手机拍的照片或者分辨率大的图像重新设置到自己固定的大小,例如4000*3000设置到1920*1080,512*512设置到128*128,具体的大小可以自定义。

上传两个程序,程序1可以使用编辑器打开运行;程序2可以直接在命令行输入参数运行。

主要函数部分

重新设置图像大小,1其中x,y就是自定义的长和宽

im_resize = cv2.resize(im, (x, y))

保存图像,并设置保存参数,包括质量、dpi的x和y值

im_dpi.save(save_path + im_name[i], quality=quality, dpi=(dpi_x, dpi_y))

程序介绍

程序1:

功能:在编辑器内运行,批量resize图像,并另保存。

函数输入:image_path=image_path, save_path=save_path, x=1920, y=1080, quality=95, dpi_x=72, dpi_y=72

对应:输入图像路径、输出图像路径、x,y,质量、dpi的x值,dpi的y值;若没有输入某些参数,将按默认值运行

示例:

resize(image_path=image_path, save_path=save_path, x=1920, y=1080, quality=95, dpi_x=72, dpi_y=72)

代码:

import cv2

import os

from PIL import Image

image_path = './image/' # 图像输入路径

save_path = './resize/' # 图像输出路径

def resize(image_path, save_path, x=256, y=256, quality=95, dpi_x=72.0, dpi_y=72.0):

# 设置图像的输入、输出、需要resize的大小,质量、和dpi值

im_name = os.listdir(image_path)

paths = []

for name in im_name:

path = os.path.join(image_path, name)

paths += [path]

for i, path in enumerate(paths):

im = cv2.imread(path) # 读取图像

print("Extract %s image, %d of %d images" % (im_name[i], i + 1, len(paths)))

im_resize = cv2.resize(im, (x, y)) # resize图像大小

im_dpi = Image.fromarray(cv2.cvtColor(im_resize, cv2.COLOR_BGR2RGB))

im_dpi.save(save_path + im_name[i], quality=quality, dpi=(dpi_x, dpi_y)) # 保存

resize(image_path=image_path, save_path=save_path, x=1920, y=1080, quality=95, dpi_x=72, dpi_y=72)

运行结果,以其中一个图像为例:

程序2

功能:使用命令行运行,批量resize图像,并另保存。

函数输入:image_path=image_path, save_path=save_path, x=1920, y=1080, quality=95, dpi_x=72, dpi_y=72

对应:输入图像路径、输出图像路径、x,y,质量、dpi的x值,dpi的y值;若没有输入某些参数,将按默认值运行。

示例:在命令行输入

python image_resize_args.py --image_path ./image/ --save_path ./resize/ -x 1024 -y 720 -quality 95 -dpi_x 72 -dpi_y 72

代码:

import cv2

import os

from PIL import Image

import argparse as ap

# Get the path of the training set

parser = ap.ArgumentParser()

parser.add_argument("--image_path", help='输入图片来源路径', required="True")

parser.add_argument("--save_path", help='输入图片存储路径', required="True")

parser.add_argument("-x", type=int, help='输入图像的长度', default=256, required="True")

parser.add_argument("-y", type=int, default=256, help='输入图像的宽度', required="True")

parser.add_argument("-quality", type=int, default=95, help='输入图像存储质量', required = "True")

parser.add_argument("-dpi_x", type=int, default=72, help='输入图像dpi_x', required="True")

parser.add_argument("-dpi_y", type=int, default=72, help='输入图像dpi_y', required="True")

args = vars(parser.parse_args())

image_path = args["image_path"]

save_path = args["save_path"]

x = args["x"]

y = args["y"]

quality = args["quality"]

dpi_x = args["dpi_x"]

dpi_y = args["dpi_y"]

def resize(image_path, save_path, x=256, y=256, quality=95, dpi_x=72, dpi_y=72):

im_name = os.listdir(image_path)

paths = []

for name in im_name:

path = os.path.join(image_path, name)

paths += [path]

for i, path in enumerate(paths):

im = cv2.imread(path)

print("Extract %s image, %d of %d images" % (im_name[i], i + 1, len(paths)))

im_resize = cv2.resize(im, (x, y))

im_dpi = Image.fromarray(cv2.cvtColor(im_resize, cv2.COLOR_BGR2RGB))

im_dpi.save(save_path + im_name[i], quality=quality, dpi=(dpi_x, dpi_y))

print(image_path, save_path, x, y, quality, dpi_x, dpi_y)

print(type(image_path), type(save_path), type(x), type(y), type(quality), type(dpi_x), type(dpi_y))

resize(image_path=image_path, save_path=save_path, x=x, y=y, quality=quality, dpi_x=dpi_x, dpi_y=dpi_y)

运行结果,以其中一个图像为例:

注意事项

首先要安装需要的库,其次注意在命令行输入时不要多输入、漏输入空格。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值