gpt4 book ai didi

python - OpenCV 通过填充调整大小

转载 作者:太空宇宙 更新时间:2023-11-03 22:45:19 24 4
gpt4 key购买 nike

我正在尝试对我正在处理的 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)?

最佳答案

我能够找到基于以前的 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))

事情是这样的:

  • 使用 if 语句比较输入图像与目标图像的纵横比,以确定是否应在垂直 (v) 轴或水平 (h) 轴上添加边框。
  • (以垂直情况为例),我使用公式 (IMG_COL/IMG_ROW)*img 计算与目标图像具有相同纵横比但宽度等于输入图像的图像的高度.shape[1].
  • 然后我减去图像的实际高度以确定边框需要多大。
  • 最后,除以二(因为添加了上/下或左/右边框)并调用 cv2.copyMakeBorder,这将创建一个具有目标纵横比的图像,并“填充”黑条宽高比之间的差异。

示例(输入 -> 输出)

关于python - OpenCV 通过填充调整大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48437179/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com