OpenCV使用Canny函數進行邊緣檢測


一、概述

  A.Canny算法介紹:算法分為五步,opencv已經幫我們封裝好了,但是在使用的時候最好用濾波再進行一次降噪,這樣效果會更好

    1.高斯模糊

    2.灰度轉換

    3.計算梯度Sobel/Scharr

    4.非最大信號抑制

    5.高低閾值連接輸出二值圖像

    ps:高低閾值:T1, T2為閾值,凡是高於T2的都保留,凡是小於T1都丟棄,從高於T2的像素出發,凡是大於T1而且相互連接的,都保留。最終得到一個輸出二值圖像。 推薦的高低閾值比值為 T2: T1 = 3:1/2:1其中T2為高閾值,T1為低閾值

  B.函數介紹    

Canny(
InputArray src, // 8-bit的輸入圖像,也就是單通道圖像
OutputArray edges,// 輸出邊緣圖像, 一般都是二值圖像,背景是黑色
double threshold1,// 低閾值,常取高閾值的1/2或者1/3
double threshold2,// 高閾值
int aptertureSize,// Soble算子的size,通常3x3,取值3
bool L2gradient // 選擇 true表示是L2來歸一化,否則用L1歸一化,一般我們選擇L1,性能更好

 

二、代碼示例

Mat src = imread(filePath);
    if(src.empty()){
        return;
    }
    imshow("src",src);
    Mat dst,result,mask;
    //均值濾波過濾
    blur(src,dst,Size(3,3));
    //轉灰度圖像
    cvtColor(dst,dst,COLOR_BGRA2GRAY);
    //邊緣檢測
    Canny(dst,result,50,100,3,true);
    mask.create(src.size(),src.type());
    src.copyTo(mask,result);
    imshow("mask",mask);
    imshow("result",result);

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM