OpenCV 4.11.0
开源计算机视觉
|
通常,我们习惯于处理固定尺寸的图像。但在某些情况下,我们需要处理不同分辨率的(相同)图像。例如,在图像中搜索某些东西,例如人脸时,我们不确定对象在图像中会以什么尺寸出现。在这种情况下,我们需要创建一组不同分辨率的相同图像,并在所有图像中搜索对象。这些不同分辨率的图像集称为图像金字塔(因为当它们以最高分辨率图像位于底部,最低分辨率图像位于顶部的方式堆叠时,看起来像金字塔)。
图像金字塔有两种:1)高斯金字塔和2)拉普拉斯金字塔
高斯金字塔中更高层(低分辨率)是通过去除低层(高分辨率)图像中连续的行和列形成的。然后,更高层中的每个像素都由底层中 5 个像素的贡献(带有高斯权重)形成。这样,一个 \(M \times N\) 的图像就变成了 \(M/2 \times N/2\) 的图像。因此,面积减少到原始面积的四分之一。这称为一个八度。当我们向上移动金字塔(即分辨率降低)时,相同的模式会继续下去。类似地,在扩展时,每一层面积都变为 4 倍。我们可以使用cv.pyrDown() 和 cv.pyrUp() 函数找到高斯金字塔。
拉普拉斯金字塔是由高斯金字塔形成的。没有专门的函数用于此。拉普拉斯金字塔图像就像边缘图像一样。它的大多数元素都是零。它们用于图像压缩。拉普拉斯金字塔中的一层是由高斯金字塔中该层与其上层在高斯金字塔中扩展版本之间的差异形成的。
我们使用函数:cv.pyrDown (src, dst, dstsize = new cv.Size(0, 0), borderType = cv.BORDER_DEFAULT)
src | 输入图像。 |
dst | 输出图像;它具有指定的大小以及与 src 相同的类型。 |
dstsize | 输出图像的大小。 |
borderType | 像素外推方法(参见 cv.BorderTypes,不支持 cv.BORDER_CONSTANT)。 |
我们使用函数:cv.pyrUp (src, dst, dstsize = new cv.Size(0, 0), borderType = cv.BORDER_DEFAULT)
src | 输入图像。 |
dst | 输出图像;它具有指定的大小以及与 src 相同的类型。 |
dstsize | 输出图像的大小。 |
borderType | 像素外推方法(参见 cv.BorderTypes,仅支持 cv.BORDER_DEFAULT)。 |