OpenCV中用Canny算子进行边缘检测
2017-08-28 18:57
495 查看
1、Canny原理
Canny算子是目前找到的一个最优的边缘检测算子。主要通过以下4个步骤:step1:用高斯滤波器平滑图象;
step2:用一阶偏导的有限差分来计算梯度的幅值和方向;
step3:对梯度幅值进行非极大值抑制;
step4:用双阈值算法检测和连接边缘。
具体的内容可以参考这篇文章。
2、OpenCV代码
#include <iostream> #include <stdlib.h> #include <opencv2/opencv.hpp> #include "opencv2/highgui/highgui.hpp" #include "opencv2/imgproc/imgproc.hpp" using namespace cv; using namespace std; int main() { Mat src = imread("1.jpg"); Mat src1 = src.clone(); // 显示原图 imshow("【效果图】Canny边缘检测", src); Mat dst, edge, gray; // 【1】创建与src同类型和大小的矩阵(dst) dst.create(src1.size(), src1.type()); // 【2】将原图转换为灰度图像 cvtColor(src1, gray, COLOR_BGR2GRAY); // 【3】先用3×3的内核来降噪 blur(gray, edge, Size(3, 3)); // 【4】运行Canny算子 Canny(edge, edge, 3, 9, 3); // 【5】将dst内的所有元素都置为0 dst = Scalar::all(0); // 【6】使用Canny算子输出的边缘图edge作为掩码,来讲原图src1拷贝到目标图dst中 src1.copyTo(dst, edge); // 【7】显示效果图 imshow("【效果图】Canny边缘检测2", dst); waitKey(0); system("pause"); return 0; }
程序运行结果:
src1.copyTo(dst, edge)函数解释:将掩膜图像(edge)加到原始图像(src1)上,并将结果保存到图像dst中。
加的方法是这样的:对于灰度图像,掩盖后在图像中掩膜中所有像素值对应为0的点变为黑色(被掩盖),其他点(所有非0值)和原来一致。
对于三通道彩色图像,某个通道中所有在掩膜中值为0的点在该通道上的像素值变为0,其他所有非0值保持和原来不变。例如当对绿色和蓝色通道加掩膜时会呈现一种图像被盖了一层红色的效果。(因为蓝色和绿色被掩盖了)
不管是灰度图像还是彩色图像,只有掩膜中像素值为0的点会对图像产生掩盖效果。
相关文章推荐
- 【OpenCV入门教程之十二】OpenCV边缘检测:Canny算子,Sobel算子,Laplace算子,Scharr滤波器合辑
- opencv之边缘检测 canny算子
- 学习opencv——从摄像机读取视频流并进行边缘检测
- 【OpenCV笔记 12】OpenCV边缘检测之canny算子
- opencv 学习第二天 学习opencv(中文版)对一幅图片进行canny边缘检测
- 基于OpenCv的边缘检测_Canny算子
- 学习【OpenCV入门教程之十二】OpenCV边缘检测:Canny算子,Sobel算子,Laplace算子,Scharr滤波器合辑---思维导图笔记
- 【OpenCV入门教程之十二】OpenCV边缘检测:Canny算子,Sobel算子,Laplace算子,Scharr滤波器合辑
- Opencv图像识别从零到精通(21)-----canny算子边缘检测
- opencv图像边缘检测使用,先做平滑处理在进行边缘检测
- 【OpenCV入门教程之十二】OpenCV边缘检测:Canny算子,Sobel算子,Laplace算子,Scharr滤波器合辑
- Opencv学习笔记(四):运用Canny算子边缘检测及Opencv中拖动条事件处理
- OpenCV学习笔记(13)OpenCV边缘检测:Canny算子,Sobel算子,Laplace算子,Scharr滤波器合辑
- Opencv实现Canny算子边缘检测
- OpenCV边缘检测:Canny算子,Sobel算子,Laplace算子,Scharr滤波器合辑
- opencv for python (16)canny边缘检测原理及用滑动条设置阈值进行canny边缘检测
- Opencv对图像做边缘检测——canny算子
- OpenCV 边缘检测:Canny算子,Sobel算子,Laplace算子,Scharr滤波器合辑
- 【OpenCV入门教程之十二】OpenCV边缘检测:Canny算子,Sobel算子,Laplace算子,Scharr滤波器合辑
- 【OpenCV入门教程之十二】OpenCV边缘检测:Canny算子,Sobel算子,Laplace算子,Scharr滤波器合辑合辑