0x00.本节课你将学到
0x01.使用OpenCV缩放图像
opencv封装了一个很好用的函数,叫resize,用于缩放图像,使用如下
resize(原图, 存放处理后图片的Mat, 尺寸, 宽度缩放比例, 高度缩放比例, 缩放方式)
resize(InputArray src, OutputArray dst, Size dsize, double fx=0, double fy=0, int interpolation=INTER_LINEAR );
其中dsize是cv::Size类型的,构造方法为cv::Size(列数, 行数)
fx和fy 与 dsize的关系是:当dsize为Size(0,0)的时候,fx,fy才会起作用
#include "opencv2/opencv.hpp"
using namespace std;
using namespace cv;
int main()
{
Mat lena, small, big;
lena = imread("lena.jpg");
//把原图缩小到原来的1/4存入small
resize(lena, small, Size(), 0.5, 0.5, INTER_LINEAR);
//把原图放大为原来的4倍,存入big
resize(lena, big, Size(lena.cols * 2, lena.rows * 2), 0, 0, INTER_LINEAR);
imshow("big", big);
imshow("lena", lena);
imshow("small", small);
waitKey(0);
return 0;
}
运行结果如下
0x02.使用OpenCV裁剪图像
使用Opencv裁剪图像,我们需要用到一个类,叫Rect,构造函数如下
Rect(int x, int y, int width, int height);
x,y为矩形左上角的坐标,width和height为矩形的宽和高
补充一句,在OpenCV和图形界面开发中,左上角为原点(0,0),x轴从左往右,y轴从上到下
有了这样一个矩形,我们就可以切割图像了
#include "opencv2/opencv.hpp"
using namespace std;
using namespace cv;
int main()
{
Mat lena, cut;
lena = imread("lena.jpg");
Rect cut_lena(lena.cols / 3, lena.rows / 3, lena.cols / 3, lena.rows / 3);
//在原图宽和高都为1/3的位置切割,且切割的宽高为原来的1/3
//就像是九宫格,切下中间的一格
cut = lena(cut_lena);
imshow("cut", cut);
waitKey(0);
return 0;
}
运行结果如下
0x03.使用OpenCV模糊图像
OpenCV常使用高斯滤波来模糊图像,函数如下
GaussianBlur(原图, 处理后存放的Mat, 高斯核, x方向上的标准差, y方向上的标准差)
一般两个标准差都置0,修改Size即可,代码如下
#include "opencv2/opencv.hpp"
using namespace std;
using namespace cv;
int main()
{
Mat lena, gauss;
lena = imread("lena.jpg");
GaussianBlur(lena, gauss, Size(13, 13), 0, 0);
//模糊lena,高斯核为13*13,模糊的结果存放到gauss中
imshow("lena", lena);
imshow("gauss", gauss);
waitKey(0);
return 0;
}
运行结果如下