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;
}
本文详细介绍了使用OpenCV进行图像尺寸调整的方法,包括resize()函数的各种参数及其应用场景,如线性插值、区域插值等。同时,探讨了向上采样(pyrUp)和向下采样(pyrDown)函数的使用,展示了如何通过这些函数放大和缩小图像,以及它们在实际编程中的应用实例。
1292

被折叠的 条评论
为什么被折叠?



