OpenCV改变图像大小的操作,resize与图像金字塔方法
2013-09-30 12:21
316 查看
OpenCV改变图像大小的操作有两类:resize与图像金字塔,但是这两类操作差别还是比较大的。
一、resize
函数原型
void resize(InputArray src, OutputArray dst, Size dsize, double fx=0, double fy=0, int interpolation=INTER_LINEAR )
各个参数的意义比较直观,但是需要注意的是dsize与fx和fy必须不能同时为零,也就是说要么dsize不为零而fx与fy同时可以为0,要么dsize为0而fx与fy不同时为0;resize函数的目标大小可以是任意的大小,可以不保持长宽比率,删除的像素或者新增的像素值通过interpolation控制;
二、图像金字塔
pyrDown与pyrUp分别表示向下降采样与向上升采样,但是二者并不是互为逆操作;
void pyrDown(InputArray src, OutputArray dst, const Size& dstsize=Size(), int border-
Type=BORDER_DEFAULT )
void pyrUp(InputArray src, OutputArray dst, const Size& dstsize=Size(), int border-
Type=BORDER_DEFAULT )
这两个操作实现图像金字塔的经典操作,他们仅仅是分别代表一次采样操作,也就是说,向下(或者向上)进行相邻层次的金字塔采样,调用一次pyrDown函数只能降低到原图像尺寸的1/2;反之,调用pyrUp目标图像则为原图像尺寸的2倍。因为它们内部都给定了一次采样尺寸的约束。也就是说采样之后,长宽比基本是不变的。
例子:
void ResizeDemo()
{
Mat img1=imread("person_org.jpg");
Mat img2;
//将原图像变为32*32,长宽比被改变了
resize(img1,img2,Size(32,32),0,0,CV_INTER_LINEAR);
namedWindow("WindowOrg");
namedWindow("WindowNew");
imshow("WindowOrg",img1);
imshow("WindowNew",img2);
waitKey(10000);
}
void PyrDown()
{
Mat img1=imread("person_org.jpg");
Mat img2;
Size sz;
//金字塔向下或者向上采样操作 ,基本不改变图像长宽比率
//pyrDown(img1,img2,sz,BORDER_DEFAULT);
pyrUp(img1,img2,sz,BORDER_DEFAULT);
pyrUp(img2,img2,sz,BORDER_DEFAULT);
namedWindow("WindowOrg");
namedWindow("WindowNew");
imshow("WindowOrg",img1);
imshow("WindowNew",img2);
waitKey(10000);
}
总结:resize可以一次性将原图像变为任意不为0的尺寸,适合用来做归一化图像操作;而pyrDown与pyrUp适合做长宽比率不变得操作,且调用一次只能变为1/2或者2倍~~~
一、resize
函数原型
void resize(InputArray src, OutputArray dst, Size dsize, double fx=0, double fy=0, int interpolation=INTER_LINEAR )
各个参数的意义比较直观,但是需要注意的是dsize与fx和fy必须不能同时为零,也就是说要么dsize不为零而fx与fy同时可以为0,要么dsize为0而fx与fy不同时为0;resize函数的目标大小可以是任意的大小,可以不保持长宽比率,删除的像素或者新增的像素值通过interpolation控制;
二、图像金字塔
pyrDown与pyrUp分别表示向下降采样与向上升采样,但是二者并不是互为逆操作;
void pyrDown(InputArray src, OutputArray dst, const Size& dstsize=Size(), int border-
Type=BORDER_DEFAULT )
void pyrUp(InputArray src, OutputArray dst, const Size& dstsize=Size(), int border-
Type=BORDER_DEFAULT )
这两个操作实现图像金字塔的经典操作,他们仅仅是分别代表一次采样操作,也就是说,向下(或者向上)进行相邻层次的金字塔采样,调用一次pyrDown函数只能降低到原图像尺寸的1/2;反之,调用pyrUp目标图像则为原图像尺寸的2倍。因为它们内部都给定了一次采样尺寸的约束。也就是说采样之后,长宽比基本是不变的。
例子:
void ResizeDemo()
{
Mat img1=imread("person_org.jpg");
Mat img2;
//将原图像变为32*32,长宽比被改变了
resize(img1,img2,Size(32,32),0,0,CV_INTER_LINEAR);
namedWindow("WindowOrg");
namedWindow("WindowNew");
imshow("WindowOrg",img1);
imshow("WindowNew",img2);
waitKey(10000);
}
void PyrDown()
{
Mat img1=imread("person_org.jpg");
Mat img2;
Size sz;
//金字塔向下或者向上采样操作 ,基本不改变图像长宽比率
//pyrDown(img1,img2,sz,BORDER_DEFAULT);
pyrUp(img1,img2,sz,BORDER_DEFAULT);
pyrUp(img2,img2,sz,BORDER_DEFAULT);
namedWindow("WindowOrg");
namedWindow("WindowNew");
imshow("WindowOrg",img1);
imshow("WindowNew",img2);
waitKey(10000);
}
总结:resize可以一次性将原图像变为任意不为0的尺寸,适合用来做归一化图像操作;而pyrDown与pyrUp适合做长宽比率不变得操作,且调用一次只能变为1/2或者2倍~~~
相关文章推荐
- OpenCV改变图像大小的操作,resize与图像金字塔方法
- opencv改变图像大小cvResize和resize
- OpenCV学习笔记:resize函数改变图像的大小
- OpenCV改变图像大小的操作
- OpenCV改变图像大小的操作
- OpenCV改变图像大小的操作
- OpenCV resize函数改变图像的大小
- opencv图像resize(改变图片大小)
- OpenCV:resize()重新调整图像大小
- opencv2改变图像像素大小到指定像素并保存改变后的图像
- 【opencv】 改变图像的对比度和亮度的两种方法
- javacpp-opencv图像处理之1:实时视频添加文字水印并截取视频图像保存成图片,实现文字水印的字体、位置、大小、粗度、翻转、平滑等操作
- Jquery的resize方法,即元素大小改变事件
- 改变图像大小(Resize)
- javacpp-opencv图像处理之1:实时视频添加文字水印并截取视频图像保存成图片,实现文字水印的字体、位置、大小、粗度、翻转、平滑等操作
- opencv3_java 修改图像大小Resize Imgproc.resize
- opencv2改变图像的大小
- 我的OpenCV学习笔记(三):利用操作像素完成简单的图像处理:加入椒盐噪声、图像翻转、改变对比度、图像锐化
- 【翻译】用正确的方法改变图片大小(Resize a UIImage the right way)
- opencv中用Resize和图像金字塔改变尺寸的区别