1. 程式人生 > >Java+opencv3.2.0之canny運算元

Java+opencv3.2.0之canny運算元

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邊緣檢測:
這裡寫圖片描述