第四个程序:图像变换
在介绍程序之前,首先说明一下图像金字塔的概念
图像金字塔是一种经典的图像多尺寸描述方法,它将采样和平滑滤波结合在一起,对图像进行多尺度表示。图像金字塔由不同尺寸的图像叠加而成,通常每一层都是上一层的一半
降采样:一种多速率数字信号处理的技术或是降低信号采样率的过程,通常用于降低数据传输速率或者数据大小
为了避免高频分量引入输出信号,我们希望首先通过一个高通滤波器来限制信号带宽,使其能在采样频率之内,在OpenCV中,高斯滤波以及降采样可以通过pyrDown()函数来实现
和降采样相对的是上采样,降采样的操作是降低取数据频率,即隔一定距离进行取样,而上采样是在两个图片中插入图像数据,进而提高其采样率
pyrDown函数详解:
函数原型:
void pyrDown(InputArray src, OutputArray dst, const Size& dstsize=Size());
函数作用:
先对图像进行高斯滤波,然后再进行将采样(将图像尺寸行和列方向缩小一半)
参数解读:
src:原始图像结构
dst:处理后的图像结构
dstsize:降采样之后的目标图像大小,不建议修改,因为此函数的作用就是将图像缩小一半,并不是自定义图像大小
pyrUp函数详解
函数原型
void pyrUp(InputArray src, OutputArray dst, const Size& dstsize=Size());
函数作用:
和pyrDown不同的是,该函数是先将图像行列方向都放大一倍,再对其进行高斯平滑
参数和pyrDown相似,不再详细展开
程序源码如下:
#include <opencv2/opencv.hpp>
using namespace cv;
int main()
{
Mat img1,img2,img3;
img1 = imread("/home/wang/opencv/project/2/1.jpg",-1);
imshow("picture_in",img1);
pyrDown(img1,img2);
pyrUp(img1,img3);
imshow("picture_pyrDown",img2);
imshow("picture_pyrUp",img3);
waitKey(0);
return 0;
}
程序编译指令如下:
g++ pyrDown.cpp -o pyrDown `pkg-config --cflags --libs opencv`
程序执行效果如下: