[OpenCV学习日记-java]-10-Canny边缘检测
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了[OpenCV学习日记-java]-10-Canny边缘检测,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1755字,纯文字阅读大概需要3分钟。
内容图文
![[OpenCV学习日记-java]-10-Canny边缘检测](/upload/InfoBanner/zyjiaocheng/645/dcb4a64bfa7e48a2af87a6bb5398ef83.jpg)
Canny边缘检测
Canny边缘检测算法是一种对噪声比较敏感的边缘检测算法
所以通常使用Canny检测之前,收先对图像进行降噪
一个完整的Canny边缘检测有以下几个步骤组成
- 高斯模糊:完成噪声抑制
- 灰度转换:在灰度图像上计算梯度值
- 计算梯度:使用Sobel/Scharr
- 非最大信号抑制:在梯度图像上寻找局部最大轮廓
- 高低阈值连接:吧边缘像素连接为线段,形成完整边缘轮廓
Canny边缘检测是函数
Canny(Mat image, Mat edges, double threshold1, double threshold2, int apertureSize, boolean L2gradient)
- image:输入图像
- edges:输出的二值边缘图像
- threshold1:最低阈值T1
- threshold2:最高阈值T2
- apertureSize:用于内部计算梯度的ksize值
- L2gradient:计算图像梯度计算方法
下面通过代码演示
Mat m1 = Imgcodecs.imread("C:\\test\\256_256_t1.png" );
Mat s1 = new Mat();
Imgproc.Canny(m1,s1,50,150,3,true)
HighGui.imshow("Canny",s1);
不同方向的Canny边缘检测
OpenCV支持从两个已经计算出来的X方向梯度和Y方向梯度,来检测边缘
他的Api如下
Canny(Mat dx, Mat dy, Mat edges, double threshold1, double threshold2)
- dx:X方向的梯度图像
- dy:Y方向的梯度图像
- edges :输出的二值边缘图像
- threshold1:最低阈值T1
- threshold2:最高阈值T2
这里需要注意的是 这里的dx个dy图像深度 必须是CV_16S
Mat m1 = Imgcodecs.imread("C:\\test\\256_256_t1.png" );
HighGui.imshow("原图",m1);
Mat s1 = new Mat();
Imgproc.Sobel(m1,s1, CvType.CV_16S,1,0);
Mat s2 = new Mat();
Imgproc.Sobel(m1,s2, CvType.CV_16S,0,1);
Mat s3 = new Mat();
Imgproc.Canny(s1,s2,s3,50,150);
//为了展示s1和s2 转换深度
Core.convertScaleAbs(s1,s1);
Core.convertScaleAbs(s2,s2);
HighGui.imshow("X方向梯度",s1);
HighGui.imshow("Y方向梯度",s2);
HighGui.imshow("Canny边缘检测",s3);
本来这里应使用灰度图,但是忘了…
最好是使用灰度图像进行计算,这样计算量会比较小
上一篇[OpenCV学习日记-java]-09-梯度计算和拉普拉斯算子
Timeless小帅 发布了35 篇原创文章 · 获赞 33 · 访问量 2万+ 私信 关注内容总结
以上是互联网集市为您收集整理的[OpenCV学习日记-java]-10-Canny边缘检测全部内容,希望文章能够帮你解决[OpenCV学习日记-java]-10-Canny边缘检测所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。