python下载图片如何保证质量最高_在给定目标大小的情况下,如何在python中调整图像大小,同时保持纵横比?...

首先,我觉得这是一个愚蠢的问题,抱歉.目前,我发现计算最佳比例因子(目标像素数的最佳宽度和高度,同时保持纵横比)的最准确方法是迭代并选择最佳比例,但必须有更好的方法.

一个例子:

import cv2, numpy as np

img = cv2.imread("arnold.jpg")

img.shape[1] # e.g. width = 700

img.shape[0] # e.g. height = 979

# e.g. Total pixels : 685,300

TARGET_PIXELS = 100000

MAX_FACTOR = 0.9

STEP_FACTOR = 0.001

iter_factor = STEP_FACTOR

results = dict()

while iter_factor < MAX_RATIO:

img2 = cv2.resize(img, (0,0), fx=iter_factor, fy=iter_factor)

results[img2.shape[0]*img2.shape[1]] = iter_factor

iter_factor += step_factor

best_pixels = min(results, key=lambda x:abs(x-TARGET_PIXELS))

best_ratio = results[best_pixels]

print best_pixels # e.g. 99750

print best_ratio # e.g. 0.208

我知道上面的代码中可能存在一些错误,即在结果字典中没有检查现有密钥,但是我更关心的是一种不同的方法,我不知道是在考虑拉格朗日优化,但这似乎相当复杂也是一个简单的问题.有任何想法吗?

**编辑后编辑**

如果有人对答案感兴趣,将提供代码

import math, cv2, numpy as np

# load up an image

img = cv2.imread("arnold.jpg")

TARGET_PIXEL_AREA = 100000.0

ratio = float(img.shape[1]) / float(img.shape[0])

new_h = int(math.sqrt(TARGET_PIXEL_AREA / ratio) + 0.5)

new_w = int((new_h * ratio) + 0.5)

img2 = cv2.resize(img, (new_w,new_h))

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值