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插值

​

调整大小有两种方式:

  • 直接规定裁剪后图片大小(size( , ))
  • 按比例将图像缩小(size()比例,比例)

三.裁剪

裁剪图片到矩形

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;



}

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

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

上一篇:子数组的取值范围-贪心算法


下一篇:Chapter3:新建项目及项目结构