OpenCV 4.10.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)。 |