opencv 图像金字塔

文章目录

  • 概念
  • 一、opencv 函数支持

概念

图像金字塔:
图像金字塔是图像的集合,所有图像都来自单个原始图像,这些图像被连续下采样,直到达到某个所需的停止点。
有两种常见的图像金字塔:
高斯金字塔:用于对图像进行下采样
拉普拉斯金字塔:用于从金字塔较低的图像(分辨率较低)重建上采样图像
高斯金字塔:
把金字塔想象成一组图层,层越高,尺寸越小。
opencv 图像金字塔_第1张图片
每一层都从下到上编号,所以层(i+1)(记作Gi+1)比层i (Gi)小。
为了在高斯金字塔中生成层(i+1),我们做如下操作:
1.将Gi与高斯核卷积:
opencv 图像金字塔_第2张图片
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 ) );
         }
     }

运行效果:
原图:
opencv 图像金字塔_第3张图片
两次上采样:
opencv 图像金字塔_第4张图片
两次下采样:
opencv 图像金字塔_第5张图片

你可能感兴趣的:(opencv,图像处理,opencv,图像处理)