C++ OpenCV图像上如何实现采样和降采样

这篇文章主要为大家展示了“C++ OpenCV图像上如何实现采样和降采样”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“C++ OpenCV图像上如何实现采样和降采样”这篇文章吧。

图像金字塔概念

图像金字塔是一种以多分辨率来解释图像的有效但概念简单的结构。应用于图像分割,机器视觉和图像压缩。一幅图像的金字塔是一系列以金字塔形状排列的分辨率逐步降低,且来源于同一张原始图的图像集合。其通过梯次向下采样获得,直到达到某个终止条件才停止采样。金字塔的底部是待处理图像的高分辨率表示,而顶部是低分辨率的近似。我们将一层一层的图像比喻成金字塔,层级越高,则图像越小,分辨率越低。

C++ OpenCV图像上如何实现采样和降采样

常见的两类图像金字塔:

  • 高斯金字塔 ( Gaussianpyramid): 用来向下采样,主要的图像金字塔

  • 拉普拉斯金字塔 (Laplacianpyramid): 用来从金字塔低层图像重建上层未采样图像,在数字图像处理中也即是预测残差,可以对图像进行最大程度的还原,配合高斯金字塔一起使用。

两者的简要区别:高斯金字塔用来向下降采样图像,而拉普拉斯金字塔则用来从金字塔底层图像中向上采样重建一个图像。

相关API

上采样  PyrUp

void pyrUp(InputArray src, OutputArray dst, const Size& dstsize=Size());

Parameters:    

    src – Source image.

    原图片

    dst – Destination image. It has the specified size and the same type as src .

    目标图片 它有指定的对象和相同的类型和原图片

    dstsize –
    Size of the destination image. By default, it is computed as Size(src.cols*2, (src.rows*2) . But in any case, the following conditions should be satisfied:

    目标图像大小。默认情况下,它是计算尺寸((SRC.列+ 1)/ 2、(SRC.行+ 1)/ 2)。但在任何情况下,应满足以下条件:

C++ OpenCV图像上如何实现采样和降采样

The function performs the upsampling step of the Gaussian pyramid construction though it can actually be used to construct the Laplacian pyramid. First, it upsamples the source image by injecting even zero rows and columns and then convolves the result with the same kernel as in pyrDown() multiplied by 4.

该函数执行采样步骤的高斯金字结构虽然它实际上可以用来构建拉普拉斯金字塔。首先,它下采样原图像的行和列,然后用相同的内核卷积的结果作为pyrdown()乘以4。

下采样  PyrDown

void pyrDown(InputArraysrc, OutputArraydst, const Size&dstsize=Size());

Parameters:   
    src – Source image.  

    原图片
    dst – Destination image. It has the specified size and the same type as src .   

    目标图片 它有指定的对象和相同的类型和原图片
    dstsize –
    Size of the destination image. By default, it is computed as Size((src.cols+1)/2, (src.rows+1)/2) . But in any case, the following conditions should be satisfied:

    目标图像大小。默认情况下,它是计算尺寸((SRC.列+ 1)/ 2、(SRC.行+ 1)/ 2)。但在任何情况下,应满足以下条件:

C++ OpenCV图像上如何实现采样和降采样

The function performs the downsampling step of the Gaussian pyramid construction. First, it convolves the source image with the kernel:

该函数执行高斯金字塔结构下采样的步骤。首先,它与内核的源图像进行卷积:

C++ OpenCV图像上如何实现采样和降采样

Then, it downsamples the image by rejecting even rows and columns.

然后,它再下采样图像的行和列。

先上干货,演示效果

代码演示

新建一个项目opencv-0013,配置属性(VS2017配置OpenCV通用属性),然后在源文件写入#include和main方法.并加载我们常用的那个图片显示出来,这次我们直接显示两个相同的图片,第一个是原图,第二个是效果图

C++ OpenCV图像上如何实现采样和降采样

代码里面我们通过了按键来控制效果图采用的上采样还是下采样

C++ OpenCV图像上如何实现采样和降采样

C++ OpenCV图像上如何实现采样和降采样

执行效果

按了U键后效果

C++ OpenCV图像上如何实现采样和降采样

按了D键效果

C++ OpenCV图像上如何实现采样和降采样

以上是“C++ OpenCV图像上如何实现采样和降采样”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!