版本:OpenCV 2.4.13
resize( )为OpenCV中专门用来调整图像大小的函数。
一、简单使用示例
方式一:指定目标图像的宽度和高
Mat srcImage = imread(“./1.jpg”); // 读取源图像
Mat dstImage; // 定义输出图像变量
resize(srcImage, dstImage, Size(300, 200), 0, 0, INTER_LINEAR); // 调整尺寸
方式二:指定目标图像宽度和高度源图像宽度和高度的比值
Mat srcImage = imread(“./1.jpg”); // 读取源图像
Mat dstImage; // 定义输出图像变量
resize(srcImage, dstImage, Size(), 0.5, 0.5, INTER_LINEAR); // 调整尺寸,设定x和y方向的缩放系数
方式三:直接使用源图像变量作为输出
Mat image = imread(“./1.jpg”); // 读取源图像
resize(image , image , Size(), 0.5, 0.5, INTER_LINEAR); // 调整尺寸,设定x和y方向的缩放系数
二、函数原型为
C++:
void resize( InputArray src,
OutputArray dst,
Size dsize,
double fx=0,
double fy=0,
int interpolation=INTER_LINEAR );
参数意义如下:
src (输入参数)输入图像,即源图像,填Mat类对象即可;
dst (输出参数)输出图像,类型和源图像类型相同;
dsize (输入参数)指定输出图像的尺寸;
fx (输入参数)指定输出图像x方向的缩放系数;
fy (输入参数)指定输出图像y方向的缩放系数;
注:(1)优先级dsize>fx/fy,即
dsize非零时,fx/fy无效,
dsize为零时,fx/fy有效;
(2)dsize、fx/fy不能同时为0,即
dsize为零时,fx、fy都不能为零
dsize非零时,fx、fy无效,为零或非零都可。
interpolation (输入参数)插值方式,可取值如下
INTER_NEAREST — 最近邻插值
INTER_LINEAR — 双线性插值(默认值)
INTER_CUBIC — 三次样条插值(超过4X4像素邻域内的双三次插值)
INTER_AREA — 区域插值(利用像素区域关系的重采样插值)
INTER_LANCZOS4 — Lanczos插值(超过8X8像素邻域的Lanczos插值)
若要缩小图像,
一般情况下最好用INTER_AREA来插值,当图像缩小时,该方法可以避免波纹出现。
若要放大图像,
一般情况下最好用INTER_CUBIC(效率不高,慢,不推荐使用)
或INTER_LINEAR(效率较高,速度较快,推荐使用)