Numpy 调整大小/重新缩放图像

新手上路,请多包涵

我想拍摄一张图像并更改图像的比例,而它是一个 numpy 数组。

例如,我有一个可口可乐瓶的图像: bottle-1

转换为形状的 numpy 数组 (528, 203, 3) 我想调整它的大小来说明第二张图像的大小: bottle-2

形状为 (140, 54, 3)

如何在保持原始图像的同时将图像的大小更改为某种形状?其他答案建议剥离每隔一行或第三行,但我想要做的基本上是通过图像编辑器但在 python 代码中缩小图像。在 numpy/SciPy 中是否有任何库可以做到这一点?

原文由 Brian Hamill 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 2.1k
2 个回答

是的,你可以安装 opencv (这是一个用于图像处理和计算机视觉的库),并使用 cv2.resize 函数。例如使用:

 import cv2
import numpy as np

img = cv2.imread('your_image.jpg')
res = cv2.resize(img, dsize=(54, 140), interpolation=cv2.INTER_CUBIC)

这里 img 是一个包含原始图像的numpy数组,而 res 是一个包含 调整大小 图像的numpy数组。一个重要的方面是 interpolation 参数:有几种方法可以调整图像大小。特别是因为您缩小了图像,并且原始图像的大小 不是 调整后图像大小的倍数。可能的插值模式是:

  • INTER_NEAREST - 最近邻插值
  • INTER_LINEAR - 双线性插值(默认使用)
  • INTER_AREA - 使用像素面积关系重采样。它可能是图像抽取的首选方法,因为它可以提供无莫尔条纹的结果。但是当图像放大时,类似于 INTER_NEAREST 方法。
  • INTER_CUBIC - 4x4 像素邻域的双三次插值
  • INTER_LANCZOS4 - 8x8 像素邻域的 Lanczos 插值

与大多数选项一样,没有“最佳”选项,因为对于每个调整大小的模式,存在一种策略可以优于另一种策略的情况。

原文由 Willem Van Onsem 发布,翻译遵循 CC BY-SA 4.0 许可协议

虽然可以单独使用 numpy 来执行此操作,但该操作不是内置的。也就是说,您可以使用 scikit-image (基于 numpy)进行这种图像处理。

Scikit-Image 缩放文档在 这里

例如,您可以对图像执行以下操作:

 from skimage.transform import resize
bottle_resized = resize(bottle, (140, 54))

这将为您处理插值、抗锯齿等事情。

原文由 jakevdp 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题