Java+opencv3.2.0之canny算子

来源:互联网 发布:vscode md转html 编辑:程序博客网 时间:2024/05/21 08:41

Canny边缘检测算子是John F.Canny于1986年开发出来的一个多级边缘检测算法。
Canny边缘检测的步骤:
(1)消除噪声,一般使用高斯平滑滤波器卷积降噪
(2)计算梯度幅值和方向,此处按照sobel滤波器步骤来操作
(3)非极大值抑制,排除非边缘像素
(4)滞后阈值(高阈值和低阈值),若某一像素位置的幅值超过高阈值,该像素被保留为边缘像素;若小于低阈值,则被排除;若在两者之间,该像素仅在连接到高阈值像素时被保留。推荐高低阈值比在2:1和3:1之间

函数:Imgproc.Canny(image, edges, threshold1, threshold2, apertureSize, L2gradient);
参数说明:
image:输入图像,即源图像,填Mat类的对象即可,且需为单通道8位图像
threshold1:双阀值抑制中的低阀值
threshold2:双阀值抑制中的高阀值
apertureSize:sobel算子模板大小,默认为3
L2gradient:计算图像梯度幅值的标识,有默认值false,梯度幅值指沿某方向的方向导数最大的值,即梯度的模

示例代码:

public static void main(String[] args)    {        System.loadLibrary(Core.NATIVE_LIBRARY_NAME);        Mat src = Imgcodecs.imread("F:\\2011031213205880528.jpg", Imgcodecs.IMREAD_GRAYSCALE);        Mat dst = src.clone();        Imgproc.GaussianBlur(src, dst, new Size(3, 3), 0);        Imgproc.Canny(dst, dst, 40, 100);        Imgcodecs.imwrite("F:\\dst.jpg", dst);    }

源图像:
这里写图片描述

Canny边缘检测:
这里写图片描述

原创粉丝点击