http://blog.csdn.net/poem_qianmo/article/details/26157633
#include<iostream>
#include<opencv2/core/core.hpp>
#include<opencv2/highgui/highgui.hpp>
#include<opencv2/imgproc/imgproc.hpp>
using namespace std;
using namespace cv;
Mat dst, src, tem;
static void showText();
int main(){
showText();
src = imread("1.jpg");
if (!src.data)
cout << "oh no " << endl;
imshow("image",src);
tem = src;
dst = tem;
int key = 0;
while (1){
key = waitKey(9);
switch (key)
{
case 27:
return 0;
break;
case 'q':
return 0;
break;
case 'a':
pyrUp(tem,dst,Size(tem.cols*2,tem.rows*2));
cout << "A被摁下,开始进行基于pyrUp的图片放大,方法尺寸:*2" << endl;
break;
case 'w':
resize(tem, dst, Size(tem.cols * 2, tem.rows * 2));
cout << "W被摁下,开始进行基于pyrUp的图片放大,方法尺寸:*2" << endl;
break;
case '1':
resize(tem, dst, Size(tem.cols * 2, tem.rows * 2));
cout << "1被摁下,开始进行基于pyrUp的图片放大,方法尺寸:*2" << endl;
break;
case '3':
pyrUp(tem, dst, Size(tem.cols * 2, tem.rows * 2));
cout << "3被摁下,开始进行基于pyrUp的图片放大,方法尺寸:*2" << endl;
break;
case 'd':
pyrDown(tem,dst,Size(tem.cols/2,tem.rows/2));
cout << "d被摁下,开始进行基于prydown的图片缩小,方法尺寸:/2" << endl;
case 's':
resize(tem, dst, Size(tem.cols / 2, tem.rows / 2));
cout << "s被摁下,开始进行基于pyrUp的图片缩小,方法尺寸:/2" << endl;
break;
case '2':
resize(tem, dst, Size(tem.cols / 2, tem.rows / 2),(0,0),(0,0),2);
cout << "s被摁下,开始进行基于pyrUp的图片缩小,方法尺寸:/2" << endl;
break;
case '4':
pyrDown(tem,dst,Size(tem.cols/2,tem.rows/2));
cout << "检测到4被摁下,开始进行基于pyrDown函数的图片所限" << endl;
break;
}
imshow("dst",dst);
tem = dst;
}
return 0;
}
static void showText(){
printf("\n\n\n\t欢迎来到OpenCV图像金字塔和resize示例程序~\n\n");
printf("\n\n\t按键操作说明: \n\n"
"\t\t键盘按键【ESC】或者【Q】- 退出程序\n"
"\t\t键盘按键【1】或者【W】- 进行基于【resize】函数的图片放大\n"
"\t\t键盘按键【2】或者【S】- 进行基于【resize】函数的图片缩小\n"
"\t\t键盘按键【3】或者【A】- 进行基于【pyrUp】函数的图片放大\n"
"\t\t键盘按键【4】或者【D】- 进行基于【pyrDown】函数的图片缩小\n"
);
}
resize,pyrUp和pyrDown的区别:
resize可以一次性将原图像变为任意不为0的尺寸,适合用来做归一化图像操作;而pyrDown与pyrUp适合做长宽比率不变得操作,且调用一次只能长和宽只能变为原来的1/2或者2倍,也即是说面积变为原来的1/4或者4倍。