【发布时间】:2018-09-13 10:59:48
【问题描述】:
我想缩放一些图像,并且我想将像素数设置为某个特定的数字。例如,如果有一个带有width=400px height=100 的图像,我可以将其缩放 0.5 以将分辨率设置为 10000px
但是下面的代码可能会产生一些 new_width*new_height 值,例如 9999 或 10001 一些其他宽度和高度值。总像素数必须为 10000。
import os
import cv2
TOTAL_PIXEL_NUMBER = 10000
path = 'path/to/images/folder'
for img in os.listdir(path):
try:
img_array = cv2.imread(os.path.join(path,img), cv2.IMREAD_GRAYSCALE)
height, width = img_array.shape
aspect_ratio = width/height
new_height = np.sqrt(TOTAL_PIXEL_NUMBER/aspect_ratio)
new_width = new_height * aspect_ratio
new_array = cv2.resize(img_array, (new_width,new_height))
data.append(new_array)
except Exceptinon as e:
print(e)
我想保持比例不变,以免图像失真。但是,保持“完全”不变并不是强制性的。例如,如果原始比率为 0.35,则在调整大小的图像中可以为 0.36 或 0.34,以使总像素数为 10000。但是我如何选择最佳比率以使分辨率恒定?或者如果有一些 opencv 函数可以做到这一点,那就太好了。
【问题讨论】:
-
您是否意识到面积为 10000 像素的矩形可能只有很少的尺寸和相应的方面(100x100、125x80、200x50、250x40、400x25 等),而不是任意方面?
-
@MBo 是的,我知道。因此我说保持比例完全相同并不是强制性的。它可能会有所改变。但在本例中,分辨率必须为 10000。
标签: python algorithm opencv computer-vision