Opencv2系列学习笔记9(使用Canny算子检测轮廓)
来源:互联网 发布:湖南拼车软件 编辑:程序博客网 时间:2024/05/17 08:30
前面我们用sobel算子和拉普拉斯变换也可以进行边缘检测,见我的上一篇blog:
http://blog.csdn.net/lu597203933/article/details/17252285
但这样得到的二值边缘图像有两大缺点。第一:检测到的边缘过粗,这意味着难以实现物体的精确定位。第二:难以找到这样的阀值,即能足够低检测到所有重要的边缘,同时也不至于包含过多次要的边缘。
这个正是canny算子要解决的。
Canny算子通常基于sobel算子,有两个阀值,这样可以得到两幅边缘图;canny算法组合这两幅边缘图以生成一副“最优”的轮廓图。如果存在连续的边缘点,则将低阀值图像中的边缘点与高阀值图像中的边缘相连接,那么就保留低阀值图像中的边缘点。这种使用双阀值以得到二值图像的策略被称为磁滞阀值化。
代码:
结果:
当然你也可以将其与上篇博客中的结果进行比对,发现效果会好很多。
另附上:
Matlab的Canny算子
BW =edge(I,'canny')
用canny算子实现边缘检测
BW =edge(I,'canny',thresh)
为canny算法指定sensitivitythresholds(阈值)。
指定两个阈值(二维矢量):第一个元素为低阈值,第二个元素为高阈值。
指定一个阈值(单个数值):用作高阈值,低阈值为0.4*高阈值。
未指定阈值(或用[]代替):自动根据图像的梯度直方图计算高低阈值。
BW =edge(I,'canny',thresh,sigma)
sigma 表示高斯滤波器的标准差,默认值为sqrt(2)。滤波器大小根据sigma值自动计算。
[BW,thresh] =edge(I,'canny',...)
用thresh返回两个阈值。
OpenCV的Canny算子
cvCanny函数头:
void cvCanny(
const CvArr* img,
CvArr* edges,
double lowThresh,
double highThresh,
int apertureSize = 3
);
image 单通道输入图像
edges 单通道图像,保存图像边缘
threshold1 阈值1
threshold2 阈值2
apertureSize Sobel算子的孔径参数 (参见 cvSobel 函数)
------------------------------
来自:http://hi.baidu.com/windroc/item/2c3afac341a6542cee4665ca
作者:小村长 出处:http://blog.csdn.net/lu597203933 欢迎转载或分享,但请务必声明文章出处。 (新浪微博:小村长zack, 欢迎交流!
- Opencv2系列学习笔记9(使用Canny算子检测轮廓)
- Opencv2系列学习笔记9(使用Canny算子检测轮廓)
- OpenCV2学习笔记(七):使用Canny算子检测轮廓
- OpenCV2编程手册笔记之 7.2使用Canny算子检测轮廓
- Canny算子检测轮廓
- Canny算子检测轮廓
- opencv3.0 函数学习 8——Canny 算子检测轮廓
- opencv3中Canny算子下的轮廓检测与绘制
- OpenCV学习笔记-Canny算子
- matlab:使用canny算子检测边缘
- OpenCV学习笔记(13)OpenCV边缘检测:Canny算子,Sobel算子,Laplace算子,Scharr滤波器合辑
- Opencv2系列学习笔记10(提取连通区域轮廓)
- 【转】Opencv2系列学习笔记10(提取连通区域轮廓)
- Opencv2系列学习笔记10(提取连通区域轮廓)
- canny边缘检测算子
- Canny边缘检测算子
- canny算子边缘检测
- Canny算子边缘检测
- Dataguard一主多备配置报错处理
- 3.揭秘angular2学习 ------- 模版
- 1052. 卖个萌 (20)
- 信号处理中的滤波器的阶数和谐波的理解
- 怎么看《就算老公一毛钱股份都没拿到,在我心里,他依然是最牛逼的创业者》文中创业公司 CEO 的行为?
- Opencv2系列学习笔记9(使用Canny算子检测轮廓)
- size_t、ssize_t类型
- java根据正则表达式查出对应字符,并在查到的字符基础上作修改
- MATLAB R2016b 安装教程
- 500mi的原则
- 使用git命令上传本地项目到gitHub中
- WEB入门之十三 jQuery选择器
- 2D游戏新手引导点光源和类迷雾实现
- 使用python定义一个神经网络结构