其他分享
首页 > 其他分享> > chapter3——图像调整大小和裁剪

chapter3——图像调整大小和裁剪

作者:互联网

一.注意:

  1. 每次先把原图像用Mat导入
  2. 再将改变后的各个图像用Mat声明,方便下方调用函数时输出显示
  3. 最后一定要有waitKey(0);让图片保持显示在界面

二.调整大小:

void resize(InputArray src, OutputArray dst, Size dsize, double fx=0, double fy=0, int interpolation=INTER_LINEAR)



​
src - 原图

dst - 目标图像。当参数dsize不为0时,dst的大小为size;否则,它的大小需要根据src的大小,参数fx和fy决定。dst的类型(type)和src图像相同

dsize - 目标图像大小。当dsize为0时,它可以通过以下公式计算得出:


所以,参数dsize和参数(fx, fy)不能够同时为0

fx - 水平轴上的比例因子。当它为0时,计算公式如下:

fy - 垂直轴上的比例因子。当它为0时,计算公式如下:


interpolation - 插值方法。共有5种:

1)INTER_NEAREST - 最近邻插值法

2)INTER_LINEAR - 双线性插值法(默认)

3)INTER_AREA - 基于局部像素的重采样(resampling using pixel area relation)。对于图像抽取(image decimation)来说,这可能是一个更好的方法。但如果是放大图像时,它和最近邻法的效果类似。

4)INTER_CUBIC - 基于4x4像素邻域的3次插值法

5)INTER_LANCZOS4 - 基于8x8像素邻域的Lanczos插值

​

调整大小有两种方式:

三.裁剪

裁剪图片到矩形

Rect 矩阵名(int x, int y, int width, int height);

//Rect(左上角x坐标,左上角y坐标,矩形的宽,矩形的高)
//Rect roi(200, 100, 300, 250);矩形左上角的坐标是(200,100),整个矩形宽300,高250

使用时将裁剪后的矩阵转化为图像输出显示

#include<opencv2\highgui\highgui.hpp>
#include<opencv2\opencv.hpp>
#include <opencv2/imgcodecs/imgcodecs.hpp>

using namespace cv;
using namespace std;

//图像调整大小和裁剪

int main()
{
	string path = "E:/opencv_prac/Resources/Resources/lambo.png";
	Mat img = imread(path);
	Mat imgResize,imgResizepro,imgCrop,imgCrop2;


	//输出图片大小
	//623*462
	//cout << img.size() << endl;


	//改变图片尺寸
	resize(img, imgResize,Size(500,500));

	//成比例改变图像尺寸,50%比例缩小
	resize(img, imgResizepro,Size(),0.5,0.5);


	//裁剪图片到长方形,roi是矩阵
	//左上角坐标(200,100)
	Rect roi(200, 100, 300, 250);
	//左上角坐标(200,50)
	Rect roi2(100, 50, 300, 250);

	//转化后要转成图片输出
	imgCrop = img(roi);
	imgCrop2 = img(roi2);

	imshow("img", img);
	imshow("Resize", imgResize);
	imshow("ResizePro", imgResizepro);
	imshow("Crop", imgCrop);
	imshow("Crop2", imgCrop2);

	waitKey(0);
	return 0;



}

标签:src,int,裁剪,chapter3,dsize,图像,INTER
来源: https://blog.csdn.net/qq_42420263/article/details/121257280