使用 OpenCV 调整图像大小

291 阅读4分钟

我正在参加「掘金·启航计划」

要调整图像大小,请考虑指定的缩放因子,沿每个轴(高度和宽度)缩放图像,或者仅设置所需的高度和宽度。  

调整图像大小时:

  • 如果您想在调整大小的图像中也保持相同的纵横比,请务必记住图像的原始纵横比(即宽度乘高度)。
  • 减小图像的大小需要对像素进行重新采样。 
  • 增加图像的大小需要重建图像。这意味着您需要插入新像素。

各种插值技术开始发挥作用来完成这些操作。OpenCV 中有多种方法可用,选择通常取决于特定的应用。

image.png

这里需要注意的一件重要事情是 OpenCV 输出图像的形状高度宽度通道数格式,而其他一些图像处理库以宽度、高度的形式给出 ** **这是有逻辑的。

当使用 OpenCV 读取图像时,它们被表示为 NumPy 数组。一般来说,您总是根据以下形式来引用数组的形状:行*列(行代表其高度,列代表其宽度)。因此,即使使用 OpenCV 读取图像以获得其形状,相同的 NumPy 数组规则也会发挥作用。你得到的形状是高度宽度通道数

调整大小函数语法

让我们首先看一下 OpenCVresize()函数语法。请注意,只需要两个输入参数: 

  1. 源图像。
  2. 调整后的图像所需的尺寸,dsize

我们将在下面的部分中讨论各种输入参数选项。

resize(src, dsize[, dst[, fx[, fy[, interpolation]]]])

  • src:这是所需的输入图像,它可以是带有输入图像路径的字符串(例如:'test_image.png')。
  • dsize:输出图像所需的尺寸,可以是新的高度和宽度。
  • fx:沿水平轴的比例因子。
  • fy:沿垂直轴的比例因子。
  • interpolation:它为我们提供了调整图像大小的不同方法的选项。

通过指定宽度和高度调整大小

在第一个示例中,我们通过指定新的宽度和高度来调整图像的大小,以缩小图像的尺寸。在下面的代码中:

  • 我们将所需的宽度设置为 300,将所需的高度设置为 200。 
  • 这两个值组合在函数所需的二维向量中resize()。 
  • 我们还指定了插值方法,这恰好是默认值。

image.png

在上面的Python代码片段中,我们使用该函数定义新的宽度和高度来放大图像**resize()** 。过程和步骤与前面的代码片段类似。

缺点:我们的调整大小操作按预期进行。根据我们定义的新高度和宽度参数,图像会变大或变小。但需要注意的一件事是,通过定义明确的宽度和高度值来调整大小会使生成的图像变形。也就是说,图像的纵横比不会保持不变。

使用缩放因子调整大小

好的,现在我们用缩放因子调整图像的大小。 但在进一步讨论之前,您需要了解缩放因子到底是什么。 

缩放因子或比例因子通常是缩放或乘以某个数量数字,在我们的例子中是图像的宽度和高度。 它有助于保持纵横比完整并保持显示质量。因此,当您放大缩小图像时,图像不会出现扭曲。****************************

Python

image.png

在上面的Python代码片段中:

  • 我们沿水平轴垂直轴定义新的缩放因子。 
  • 定义缩放因子后就不再需要新的宽度和高度点。因此,我们保留***dsizeNone*

使用不同的插值方法调整大小

不同的插值方法用于不同的调整大小目的。

  • INTER_AREA  INTER_AREA使用像素面积关系进行重采样。这最适合减小图像的尺寸(缩小)。当用于放大图像时,它使用该INTER_NEAREST方法。
  • INTER_CUBIC 这使用双三次插值来调整图像大小。在调整大小和插入新像素时,该方法作用于图像的 4×4 相邻像素。然后,它采用 16 个像素的权重平均值来创建新的插值像素。
  • INTER_LINEAR:这种方法有点类似于INTER_CUBIC插值法。但与 不同的是INTER_CUBIC,它使用 2×2 相邻像素来获得插值像素的加权平均值。
  • INTER_NEAREST:该INTER_NEAREST方法使用最近邻概念进行插值。这是最简单的方法之一,仅使用图像中的一个相邻像素进行插值。

Python

image.png

概括

学习了使用自定义高度和宽度来调整图像大小。了解如何使用缩放因子保持纵横比不变,确保调整大小后的图像看起来不会失真。我们还讨论了不同类型的插值方法。