OpenCV图像滤波(4)构建图像金字塔函数buildPyramid()的使用

  • 操作系统:ubuntu22.04
  • OpenCV版本:OpenCV4.9
  • IDE:Visual Studio Code
  • 编程语言:C++11

算法描述

在计算机视觉和图像处理中,构建图像金字塔(Image Pyramid)是一种常用的技术,它生成一系列分辨率逐渐降低的图像副本。图像金字塔在很多应用中都非常有用,比如目标检测、特征匹配、尺度不变特征提取等。

图像金字塔的类型

  • 高斯金字塔(Gaussian Pyramid):
    • 通常用于生成不同尺度下的图像副本。
    • 每一层金字塔都是前一层的低通滤波版本。
  • 拉普拉斯金字塔(Laplacian Pyramid):
    • 通常用于图像融合、图像压缩等。
    • 每一层是相邻两层高斯金字塔之间的差异。

函数原型

函数构建图像的高斯金字塔。
该函数构造一个图像向量,并通过递归地应用 pyrDown 到之前构建的金字塔层来构建高斯金字塔,从 dst[0] == src 开始。

void cv::buildPyramid	
(
	InputArray 	src,
	OutputArrayOfArrays 	dst,
	int 	maxlevel,
	int 	borderType = BORDER_DEFAULT 
)	

参数

  • 参数src: 源图像。请参阅 pyrDown 的文档以获取支持的图像类型列表。
  • 参数dst: 目的地向量,包含 maxlevel + 1 个与 src 同类型的图像。dst[0] 将与 src 相同。dst[1] 是金字塔的下一层,它是 src 的平滑和缩小版,依此类推。
  • 参数maxlevel:最后一层(最小的一层)金字塔的 0 基索引。必须是非负数。
  • 参数borderType:像素外推方法,参见 BorderTypes(不支持 BORDER_CONSTANT)

示例代码

#include <opencv2/opencv.hpp>
#include <iostream>
#include <vector>

int main(int argc, char** argv)
{
    // 加载图像
    cv::Mat src = cv::imread("/media/dingxin/data/study/OpenCV/sources/images/fruit_small.jpg", cv::IMREAD_COLOR);
    if (!src.data)
    {
        std::cerr << "错误: 无法打开或找到图像。" << std::endl;
        return -1;
    }

    // 创建金字塔
    int maxlevel = 3; // 金字塔层数
    std::vector<cv::Mat> pyramid(maxlevel + 1);

    // 构建高斯金字塔
    pyramid[0] = src; // 第一层为原始图像
    for (int i = 1; i <= maxlevel; ++i)
    {
        cv::pyrDown(pyramid[i - 1], pyramid[i]); // 使用pyrDown构建下一层
    }

    // 显示原始图像和金字塔中的每一层
    cv::namedWindow("原始图像", cv::WINDOW_NORMAL);
    cv::imshow("原始图像", src);

    for (int i = 0; i <= maxlevel; ++i)
    {
        std::stringstream windowNameStream;
        windowNameStream << "金字塔第 " << (i + 1) << " 层";
        std::string windowName = windowNameStream.str();
        cv::namedWindow(windowName, cv::WINDOW_NORMAL);
        cv::imshow(windowName, pyramid[i]);
    }

    cv::waitKey(0);

    return 0;
}

运行结果

原始图像:
在这里插入图片描述
金字塔第一层:
在这里插入图片描述
金字塔第二层:
在这里插入图片描述
金字塔第三层:

在这里插入图片描述
金字塔第四层:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值