opencv 图像金字塔

概念

图像金字塔:
图像金字塔是图像的集合,所有图像都来自单个原始图像,这些图像被连续下采样,直到达到某个所需的停止点。
有两种常见的图像金字塔:
高斯金字塔:用于对图像进行下采样
拉普拉斯金字塔:用于从金字塔较低的图像(分辨率较低)重建上采样图像
高斯金字塔:
把金字塔想象成一组图层,层越高,尺寸越小。
在这里插入图片描述
每一层都从下到上编号,所以层(i+1)(记作Gi+1)比层i (Gi)小。
为了在高斯金字塔中生成层(i+1),我们做如下操作:
1.将Gi与高斯核卷积:
在这里插入图片描述
2.删除每一个偶数的行和列。
生成的图像将恰好是前一个图像面积的四分之一。在输入图像G0(原始图像)上迭代这个过程产生整个金字塔。
上面的程序是对图像的下采样。如果我们想让它变大呢?:用0填满列
1。首先,使用新的偶数行和在每个维度上将图像放大到原来的两倍
1.与上面所示的相同内核进行卷积(乘以4),以逼近“缺失像素”的值

一、opencv 函数支持

下采样:

CV_EXPORTS_W void pyrDown( InputArray src, OutputArray dst,
                           const Size& dstsize = Size(), int borderType = BORDER_DEFAULT );
                           

上采样:

CV_EXPORTS_W void pyrUp( InputArray src, OutputArray dst,
                         const Size& dstsize = Size(), int borderType = BORDER_DEFAULT );
                           

代码示例:

    cv::Mat src;
    src = cv::imread("D:\\QtProject\\Opencv_Example\\pyramid\\pyramid.jpg", cv::IMREAD_COLOR);
    if (src.empty()) {
      cout << "Cannot load image" << endl;
      return;
    }
    while(1)
     {
         show(src);
         char c = (char)waitKey(0);
         if( c == 27 )
         { break; }
         else if( c == 'i' )
         {
             pyrUp( src, src, Size( src.cols*2, src.rows*2 ) );
         }
         else if( c == 'o' )
         {
             pyrDown( src, src, Size( src.cols/2, src.rows/2 ) );
         }
     }

运行效果:
原图:

两次上采样:
在这里插入图片描述
两次下采样:
在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值