图像金字塔
图像金字塔的作用
图像金字塔简单来说就是用多个不同的尺寸来表示一张图片。如下图,最左边的图片是原始图片,然后从左向右图片的尺寸依次缩小直到图片的尺寸达到一个阈值,这个阈值就是多次缩小图片的最小尺寸,不会有比这更小尺寸的图片了,像这种图片的尺寸逐步递增或递减的多张图层就是图像金字塔,每张不同尺寸的图片都称为图像金字塔的一层。图像金字塔的目的就是寻找图片中出现的不同尺寸的目标(物体、动物等)。
代码实现
创建了、一个名为 pyramid
函数,这个函数将用来生成图像金字塔,这个函数有三个参数,如下所示。
- 第一个参数
image
是要进行图像金字塔操作的原始图片。 - 第二个参数
top
是图像将会被缩小的最小尺寸,我们将这个参数设置一个默认值为(128, 128)
,第一个128
表示图片的高,第二个128
表示图片的宽。 - 第三个参数
ratio
表示每次图像将会被缩小ratio
倍,我们给这个参数设置了一个默认值为1.2
。
import cv2 |
在函数内我们首先使用 yield
生成器返回原始图片,因为在图像金字塔的最底端我们需要一张原始图片。然后使用 while
循环来不断缩小图片尺寸。直到缩小后图片的尺寸比前面的 top
参数小为止。在循环内 (w, h)
表示图像金字塔前一层的图像缩小 ratio
倍的宽和高。我们使用 cv2.resize
方法将前一层图片进行缩放,我们将 (w, h)
作为函数的第二个参数,表示缩放后图片的宽和高的值。
随着图片的尺寸不断缩小,我们使用 if
语句判断图片的尺寸是否已经到达了设定的最小尺寸,将每次图片缩放后的宽和高与设定的最小尺寸 top
进行对比,如果小于最小尺寸则使用 break
结束循环。最后使用 yield
生成器返回每次缩放后的图片。至此图像金字塔的函数就构建完成了。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Wang Yiran!