前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >OpenCV 几何变换-图像缩放

OpenCV 几何变换-图像缩放

作者头像
chaibubble
发布2022-05-07 09:25:02
4080
发布2022-05-07 09:25:02
举报
文章被收录于专栏:深度学习与计算机视觉

图像的缩放主要用于改变图像的大小,缩放后图像的图像的宽度和高度会发生变化。在图像处理中是一种很基础的几何变换,但是具有很重要的作用,比如:当输入图片尺寸过大时,处理速度会很慢,适当的缩小图像可以在不影响处理效果的同时有效提高代码执行速度。 opencv提供了resize函数实现图片缩放功能,函数原型为:

代码语言:javascript
复制
CV_EXPORTS_W void resize( 
InputArray src, 
OutputArray dst,
Size dsize, 
double fx=0, 
double fy=0,
int interpolation=INTER_LINEAR );

其中: 第一个参数为输入图像 第二个参数为输出图像 第三个参数为输出图像和输入图像尺寸(包含长宽) 第四个参数为输出图像和输入图像水平方向上的比例 第五个参数为输出图像和输入图像垂直方向上的比例 第六个参数为插值方法: CV_INTER_NN - 最近邻插值, CV_INTER_LINEAR - 双线性插值 (缺省使用) CV_INTER_AREA - 使用象素关系重采样。当图像缩小时候,该方法可以避免波纹出现。当图像放大时,类似于 CV_INTER_NN 方法… CV_INTER_CUBIC - 立方插值.

需要注意的是: dsize是一个Size类型的数据,它包含图像的长和宽,而fx和fy为double类型,值反应图像的长或宽的比例。所以dsize和fx,fy必须不能同时为零,也就是说要么dsize不为零而fx与fy同时可以为0,要么dsize为0而fx与fy不同时为0;resize函数的目标大小可以是任意的大小,可以不保持长宽比率,删除的像素或者新增的像素值通过interpolation(内插)控制;

如果dsize不为零,fx,fy会自动计算: fx=dsize.width/src.cols; fy=dsize.height/src.rows; 所以我们可以这样写:

代码语言:javascript
复制
Mat  sizeimage;
Size dsize = Size(srcimage.cols*0.5,srcimage.rows*0.5);
resize(srcimage, sizeimage,dsize);

我们定义比例因子是0.5,手动计算出图像缩放后的尺寸,然后把这个尺寸放在Size中。当然在Size里面也是可以直接输入数值的,这样的话可以做固定尺寸的操作,而不发生裁剪。

代码语言:javascript
复制
Size dsize = Size(100,100);

也可以这样:

代码语言:javascript
复制
Mat  sizeimage;
resize(srcimage, sizeimage,Size(0,0),0.5,0.5);

此时我们直接把比例给入resize函数,效果是相同的。

这里写图片描述
这里写图片描述
这里写代码片
这里写代码片

但是如果出现Size和fx,fy同时都不为0的情况呢?比如:

代码语言:javascript
复制
	Mat sizeimage;
	Size dsize = Size(srcimage.cols*0.2,srcimage.rows*0.2);
	resize(srcimage, sizeimage,dsize,0.5,0.5);
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

显然Size的优先级要大于fx和fy

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017-03-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档