一.注意:
- 每次先把原图像用Mat导入
- 再将改变后的各个图像用Mat声明,方便下方调用函数时输出显示
- 最后一定要有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;
}