029_影像金字塔(pryUp、pryDown) _ 阿洲的程式教學1

preview
需积分: 0 1 下载量 185 浏览量 更新于2022-08-04 收藏 530KB PDF 举报
【影像金字塔】是图像处理中的一个关键概念,用于构建不同分辨率的图像层级,常用于图像识别、物体检测和图像缩放等任务。OpenCV库提供了两个函数,即`pyrUp()`和`pyrDown()`,来实现这一过程。 **1. 高斯金字塔与拉普拉斯金字塔** 高斯金字塔是由下至上构建的,每一层都是上一层的四分之一大小。在OpenCV中,使用`pyrDown()`函数构建高斯金字塔,它通过高斯滤波(Gaussian blur)和下采样(downsampling)来降低图像的分辨率。而拉普拉斯金字塔是在高斯金字塔的基础上构建,通过计算高斯金字塔各层与上一层的差分得到,主要用于细节的保留和重建。 **2. `pyrUp()`函数** `pyrUp()`函数用于将图像向上金字塔化,即将低分辨率的图像放大到更高分辨率。这个过程包括两个步骤:将输入图像进行上采样(upsampling),通常是简单地复制像素值;然后,使用高斯滤波器平滑新插入的像素,以减少放大过程中引入的锯齿和噪声。 **3. `pyrDown()`函数** `pyrDown()`函数则是将图像向下金字塔化,即将图像缩小至更低分辨率。它首先对输入图像应用高斯滤波,然后通过移除图像的偶数行和列(即下采样)来减小图像尺寸。在OpenCV中,如果未指定`dstsize`,默认的输出图像尺寸是输入图像的一半。 **4. 示例代码** 在给定的代码片段中,展示了如何使用`pyrDown()`和`pyrUp()`进行图像处理。使用`pyrDown()`函数将原始图像缩小,然后使用`pyrUp()`函数将缩小后的图像放大。虽然可以恢复到原始图像的大小,但由于下采样时丢失了部分信息,所以放大后的图像在清晰度上不如原始图像。 ```cpp #include <cstdio> #include <opencv2/opencv.hpp> using namespace cv; int main(){ Mat src = imread("lena.jpg"); Mat dst1; Mat dst2; pyrDown(src, dst1, Size(src.cols/2, src.rows/2)); pyrUp(dst1, dst2, Size(dst1.cols*2, dst1.rows*2)); imshow("origin", src); imshow("pyrDown", dst1); imshow("pyrUp", dst2); waitKey(0); return 0; } ``` 这段代码读取名为"lena.jpg"的图像,使用`pyrDown()`将其缩小,然后用`pyrUp()`放大,并显示了原始图像、缩小后的图像和放大后的图像。 总结起来,影像金字塔是通过`pyrUp()`和`pyrDown()`函数在OpenCV中实现的一种图像处理技术,它允许我们处理不同尺度的图像,对于图像识别和分析有着重要的作用。在实际应用中,可以根据需求选择合适的方法,例如在物体检测时,可以先在低分辨率图像上快速搜索,然后在高分辨率图像上进行精确匹配。