我正在尝试为我正在处理的Python / OpenCV应用程序执行一些图像预处理。我有一个非常简单的函数,它从文件中加载一个图像,并将其调整为一定的大小:
def get_im(path):
img = cv2.imread(path, cv2.IMREAD_COLOR)
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
img = cv2.resize(img, (IMG_ROW, IMG_COL))
img = np.array(img)
img = img.astype('float32')
img /= 255
return img
虽然这会调整我的图像大小,但是当它这样做时,它会改变图像的宽高比。我怎样才能(最好使用OpenCV)缩放图像以适应特定尺寸(IMG_ROW,IMG_COL)而不改变宽高比?
答案 0 :(得分:1)
我能够找到基于以前的C ++解决方案的解决方案:
# Resize
border_v = 0
border_h = 0
if (IMG_COL/IMG_ROW) >= (img.shape[0]/img.shape[1]):
border_v = int((((IMG_COL/IMG_ROW)*img.shape[1])-img.shape[0])/2)
else:
border_h = int((((IMG_ROW/IMG_COL)*img.shape[0])-img.shape[1])/2)
img = cv2.copyMakeBorder(img, border_v, border_v, border_h, border_h, cv2.BORDER_CONSTANT, 0)
img = cv2.resize(img, (IMG_ROW, IMG_COL))
以下是发生的事情:
(IMG_COL/IMG_ROW)*img.shape[1]
的输入图像。cv2.copyMakeBorder
,这会创建一个目标纵横比为黑色条形图像"填充"宽高比之间的差异。 示例(输入 - >输出)