python 修改图片尺寸 留白_python等比压缩图片到固定大小,不足的留白

该博客介绍了如何使用Python的OpenCV和PIL库进行图片等比例缩放,并在尺寸不足时用白色填充。通过遍历文件夹中的图片,对每张图片进行双三次插值缩放,然后保存处理后的图片。代码中存在读取和保存图片的冗余操作,可以进一步优化。
摘要由CSDN通过智能技术生成

代码中为了切换图片的读取格式将图片保存后又读取了一遍,太过繁琐,需要改进的代码请前往

https://blog..net/lidongxx/article/details/92769009

from PIL import Image

from PIL import ImageFilter

import cv2

import time

import os

import numpy as np

im = Image.new("RGB", (400, 400), "white")

imndarray = np.array(im)

path = "C:/Users/Administrator/Desktop/E9-211-JPG/E9-JPG"

path1 = "C:/Users/Administrator/Desktop/newE9-JPG"

filenames = os.listdir(path)

time1 = time.time()

#读入图像

#resp = urllib.request.urlopen(url)

#image = np.asarray(bytearray(resp.read()), dtype="uint8")

#image = cv2.imdecode(image, cv2.IMREAD_COLOR)

for i in filenames:

filename = os.path.join(path, i)

filename1 = os.path.join(path1, i)

image = cv2.imdecode(np.fromfile(filename, dtype=np.uint8), -1)

#双三次插值

height, width = image.shape[:2] #获取原图像的水平方向尺寸和垂直方向尺寸。

temp = max(height, width)

multemp = temp/400

if height > width:

res = cv2.resize(image, (int(width / multemp), 400), interpolation=cv2.INTER_AREA)

elif height < width:

res = cv2.resize(image, (400, int(height / multemp)), interpolation=cv2.INTER_AREA)

else:

res = cv2.resize(image, (400, 400), interpolation=cv2.INTER_AREA)

cv2.imwrite("C:/Users/Administrator/Desktop/temp/101.jpg", res)

imgE = Image.open("C:/Users/Administrator/Desktop/temp/101.jpg")

gary2 = imgE.filter(ImageFilter.DETAIL)

#图像点运算

gary3 = gary2.point(lambda i: i*0.9)

#savePath = (filename1)

img_convert_ndarray = np.array(gary3)

height1, width1 = img_convert_ndarray.shape[:2]

temph = int((400 - height1)/2)

tempw = int((400 - width1)/2)

a = cv2.copyMakeBorder(img_convert_ndarray, temph, 400-temph-height1,tempw, 400-tempw-width1, cv2.BORDER_CONSTANT, value=[255, 255, 255])

cv2.imencode('.jpg', a)[1].tofile(filename1) # 保存图片

time2 = time.time()

print (u'总共耗时:' + str(time2 - time1) + 's')

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值