一、彩色图像转灰度
Opencv提供了一个方法,可以使彩色图像变为灰度图像。
函数名:cvtColor(src,dest,way);
src表示初始的mat对象;
dest表示转换后的mat对象;
way表示以何种方式转换。
举个例子:
int main() { //定义路径 string path = "Resources//test.png";
//Mat:opencv引入的矩阵数据类型,处理所有图像 Mat img = imread(path); //创建一个新的mat对象,用来存放转换后的灰度图像
Mat imgGray; //灰度转换函数 cvtColor(img, imgGray, COLOR_BGR2GRAY); //展示图片,并给图片取名
imshow("Image", img); //延迟,直到我们按下关闭按钮 imshow("ImageGray", imgGray); waitKey(0);
return 0; }
这里的方法就是COLOR_BGR2GRAY,
解释出来就是:RGB颜色to灰度。
运行截图:
二、高斯模糊
高斯模糊本质上是低通滤波器,输出图像的每个像素点是原图像上对应像素点与周围像素点的加权和。
函数:GaussianBlur(src,dest,size(m,n),sigma1,sigma2);
高斯模糊,第三,第四,第五参数为高斯模糊的度数。
定义内核大小为m*n,数字越大越模糊;
然后有sigma1和sigma2,这两个数也是模糊度数的参数,可定义为0。
//创建一个模糊对象 Mat imgBlur; //高斯模糊,第三,第四,第五参数为高斯模糊的度数, //定义内核大小为7*7,数字越大越模糊;
//然后有sigma1和sigma2,这两个数可定义为0 GaussianBlur(img, imgBlur, Size(7, 7),0,0);
imshow("ImageBlur", imgBlur); waitKey(0);
运行截图:
三、边缘检测
我们有很多边缘检测器,用于检测图像的边缘轮廓。
最常用的是坎尼边缘检测器。
Canny(src,dest,low,high);
检测前通常做模糊处理。
两个阈值:双阈值筛选
设置一个双阈值,即低阈值(low),高阈值(high)。
灰度变化大于high的,设置为强边缘像素,低于low的,剔除。
//坎尼边缘检测器 Mat imgCanny; //检测前通常做模糊处理 //两个阈值:双阈值筛选
//设置一个双阈值,即低阈值(low),高阈值(high)。 //灰度变化大于high的,设置为强边缘像素,低于low的,剔除。 Canny(imgBlur,
imgCanny, 50, 150); imshow("ImageCanny", imgCanny);
运行截图:
阈值为25,75: