1、尺寸调整:resize()函数
void resize( InputArray src, OutputArray dst,
Size dsize, double fx = 0, double fy = 0,
int interpolation = INTER_LINEAR );
src | 输入图像 |
dst | 输出图像 |
dsize | 输出图像的大小,如果未指定,用fx,fy来计算 |
fx | 水平轴的缩放系数 |
fy | 垂直轴的缩放系数 |
interpolation | 插值方式,默认为INTER_LINEAR(线性插值) |
INTER_NEAREST | 最近邻插值 |
INTER_LINEAR | 线性插值(默认值)(放大图像时推荐) |
INTER_AREA | 区域插值(利用像素区域关系)(缩小图像时推荐) |
INTER_CUBIC | 三次样条插值 |
INTER_LANCZOS4 | lanczos插值 |
两种调用范畴:
方式一:
Mat dst = Mat::zeros(512, 512, CV_8UC3);
Mat src = imread("1.jpg");
resize(src,dst,dst.size());
显式指定dsize=dst.size();fx和fy会自己计算出来,不用额外指定。
方式二:
Mat dat;
Mat src = imread("1.jpg");
resize(src, dst, Size(), 0.5, 0.5);
指定fx,fy,函数计算出目标图像的大小。
2、向上采样:pyrUp()函数(放大一张图片)
void pyrUp( InputArray src, OutputArray dst,
const Size& dstsize = Size(), int borderType = BORDER_DEFAULT );
src | 输入图像 |
dst | 输出图像 |
dstsize | 输出图像大小;有默认值Size(src.cols*2,src.rows*2)来进行计算 |
borderType | 边界模式 |
3、向下采样:pyDown()函数(缩小一张图片)
src | 输入图像 |
dst | 输出图像 |
dstsize | 输出图像大小;有默认值Size(src.cols/2,src.rows/2)来进行计算 |
borderType | 边界模式 |
综合示例:
#include<opencv2/opencv.hpp>
#include<opencv2/highgui.hpp>
using namespace cv;
int main()
{
//Mat dst = Mat::zeros(512, 512, CV_8UC3);
//Mat src = imread("F:/3.jpg");
//resize(src,dst,dst.size());
Mat dst1,dst2,dst3;
Mat src = imread("F:/3.jpg");
resize(src, dst1, Size(), 2, 2);
pyrUp(src, dst2, Size(src.cols*2,src.rows*2));
pyrDown(dst2, dst3);
imshow("dst1",dst1);
imshow("dst2", dst2);
imshow("dst3", dst3);
waitKey(0);
return 0;
}