首先我的一部分感覺這是一個愚蠢的問題,對此感到遺憾。目前,我已經找到了計算最佳比例因子(目標像素數量的最佳寬度和高度,同時保留長寬比)的最準確方法,它正在迭代並選擇最佳比例因子,但必須有更好的方法來做到這一點。如何在保留長寬比的情況下調整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))
嗯這個代碼不保持我的寬高比...如果我提供例如寬屏圖像,它延伸它垂直,以填補一個正方形的TARGET_PIXEL_AREA – BigBoy1337