Java+opencv3.2.0之canny運算元
阿新 • • 發佈:2019-02-10
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邊緣檢測: