OpenCV图像预处理实战:灰度转换、高斯模糊与Canny边缘检测
本文详细介绍OpenCV中三种核心图像预处理技术:利用cvtColor实现彩色到灰度的转换,通过GaussianBlur进行低通滤波模糊处理,以及使用Canny算法结合双阈值进行精确边缘检测。文章提供C++代码示例及参数说明,帮助开发者掌握基础图像处理流程。
一、彩色图像转灰度
OpenCV提供了便捷的接口,可将彩色图像转换为灰度图像。
核心函数为cvtColor(src, dest, way),其中src代表输入的Mat矩阵对象,dest代表输出转换后的Mat矩阵对象,而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颜色空间转换为灰度空间。
解释出来就是: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);
运行截图:

三、边缘检测
OpenCV提供了多种边缘检测算法,用于提取图像的边缘轮廓信息。
其中应用最为广泛的是Canny边缘检测器。
函数调用形式为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:

到此这篇关于OpenCV实现灰度、高斯模糊、边缘检测的示例的文章就介绍到这了,更多相关OpenCV 灰度、高斯模糊、边缘检测内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









