Canny算子检测轮廓
来源:互联网 发布:app源码 带后台数据库 编辑:程序博客网 时间:2024/06/01 07:43
1.概念及原理
(1)之前我们是对梯度大小进行阈值化以得到二值的边缘图像。但是这样做有两个缺点。其一是检测到的边缘过粗,难以实现物体的准确定位。其二是很难找到合适的阈值既能足够低于检测到所有重要边缘,又能不至于包含过多次要边缘,这就是Canny算法尝试解决的问题。
(2)Canny算子通常是基于Sobel算子,当然也可以使用其他梯度算子。其思想是使用一个低阈值一个高阈值来确定哪些点属于轮廓。低阈值的作用主要是包括所有属于明显图像轮廓的边缘像素。高阈值的作用是定义所有重要轮廓的边缘。Canny算子是组合低阈值和高阈值这两幅边缘图以生成最优的轮廓图。这种使用双阈值以得到二值图像的策略被称为磁滞阈值化。
2.实验
使用Canny算子检测轮廓
源码示例(很简单)
[cpp] viewplain copy
1. <pre name="code" class="cpp">#include<iostream>
2. #include <opencv2/core/core.hpp>
3. #include <opencv2/highgui/highgui.hpp>
4. #include<imgproc/imgproc.hpp>
5.
6. using namespace std;
7. using namespace cv;
8.
9. int main(){
10.
11. Mat image = imread("tree.jpg", 0);
12. namedWindow("image");
13. imshow("image", image);
14.
15. Mat contours;
16. Canny(image, //灰度图
17. contours, //输出轮廓
18. 125, //低阈值
19. 350); //高阈值
20.
21. //因为正常情况下轮廓是用非零像素表示 我们反转黑白值
22. Mat contoursInv; //反转后的图像
23. threshold(contours,
24. contoursInv,
25. 128, //低于该值的像素
26. 255, //将变成255
27. THRESH_BINARY_INV);
28. namedWindow("contoursInv");
29. imshow("contoursInv", contoursInv);
30.
31. waitKey(0);
32. return 0;
33. }
实验效果图
- Canny算子检测轮廓
- Canny算子检测轮廓
- Opencv2系列学习笔记9(使用Canny算子检测轮廓)
- OpenCV2学习笔记(七):使用Canny算子检测轮廓
- opencv3中Canny算子下的轮廓检测与绘制
- Opencv2系列学习笔记9(使用Canny算子检测轮廓)
- canny边缘检测算子
- Canny边缘检测算子
- canny算子边缘检测
- Canny算子边缘检测
- Canny边缘检测算子
- 边缘检测:Canny算子
- Canny算子,Houng变换检测图像轮廓,直线等图像元素
- opencv3.0 函数学习 8——Canny 算子检测轮廓
- OpenCV2编程手册笔记之 7.2使用Canny算子检测轮廓
- 边缘检测与Canny算子
- Canny算子边缘检测资源
- 边缘检测值canny算子
- <Unknown column 'card_id' in 'order clause'>
- Javascript学习笔记(对象)
- 内排序——插入排序—直接插入(稳定)—希尔(不稳定)
- thinkphp5.0学习(十一):TP5.0杂项
- Cmake知识----编写CMakeLists.txt文件编译C/C++程序
- Canny算子检测轮廓
- GreenDao查询数据带缓存
- [spark streaming] DStream 和 DStreamGraph 解析
- Java编程思想(Thinking in Java)阅读笔记(仅供自身学习,持续更新)
- 从浅到深了解ArrayList
- 搭建个人博客-hexo+github详细完整步骤
- django中用外键还是非外键?建议尽量用外键。
- JAVA第十四周作业
- maven项目中添加自己的jar包