/*
1:进行图像缩放的最精准和高效的方法就是用resize自带函数,通过
手动输入缩放以后图像的长宽或者缩放的比例即可。
2:图像金字塔说白了就是用来缩放图像的,但是其缩放效果不如resize
而且模糊程度较高。图像金字塔是在学习卷积神经网络时会经常遇到
这个名词,需要好好理解一下.
3:两种类型的金字塔:
高斯金字塔:用于下采样,主要的图像金字塔;
拉普拉斯金字塔:用于重建图像,也就是预测残
差(因为小图像放大,必须插入一
些像素值,那这些像素值是什么才合适呢,那就
得进行根据周围像素进行预测),对图像进行最
大程度的还原。比如一幅小图像重建为一幅大图像
4:图像金字塔有两个高频出现的名词:上采样和下采样。现在说说他们俩。
上采样:就是图片放大(所谓上嘛,就是变大),使用PryUp函数
下采样:就是图片缩小(所谓下嘛,就是变小),使用PryDown函数
5: 下采样将步骤:
对图像进行高斯内核卷积,然后将所有偶数行和列去除
下采样就是图像压缩,会丢失图像信息。
6:上采样步骤:
将图像在每个方向放大为原来的两倍,新增的行和列用0填充;
使用先前同样的内核(乘以4)与放大后的图像卷积,获得新增像素的近似值。
上、下采样都存在一个严重的问题,那就是图像变模糊了,因为缩放的过程中发生了信息丢失的问题。
注:没接触过图像处理或者信号处理相关课程的同学可能不太理解卷积操作
的含义,卷积在神经网络中是经常出现的名词,我觉得有必要根据自己的
理解记忆一下,我的理解,其实卷积就是一种叠加,通过不同的大小卷积核
来进行图像的处理操作,不同的卷积核和不同的卷积方式,可以给图像进行
不同的处理,例如模糊,滤波等等。所以我认为卷积可以理解为叠加的感觉。
*/
#include<opencv.hpp>
#include<highgui.hpp>
#include<imgproc.hpp>
using namespace std;
using namespace cv;
void main()
{
Mat img = imread("jack1.jpg");
Mat dst1, dst2;
Mat resize1, resize2;
Mat dst = Mat::zeros(512, 512, CV_8UC3); //我要转化为512*512大小的
resize(img,resize1,Size(),0.5,0.5);
resize(img, resize2, Size(500,500));
imshow("resize1", resize1);
imshow("resize2", resize2);
pyrDown(img, dst1, Size(img.cols*0.5,img.rows*0.5));
pyrUp(img, dst2, Size(img.cols*2,img.rows*2));
imshow("dst1",dst1);
imshow("dst2", dst2);
waitKey(0);
return;
}