opencv::Canny邊緣檢測


 

Canny算法介紹 五步 in cv::Canny
    高斯模糊 - GaussianBlur
    灰度轉換 - cvtColor
    計算梯度 – Sobel/Scharr
    非最大信號抑制
    高低閾值輸出二值圖像 


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

 

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,參數設置為false
  

 

 

Mat src, gray_src, dst;
int t1_value = 50;
int max_value = 255;
const char* OUTPUT_TITLE = "Canny Result";
void Canny_Demo(int, void*);

int main(int argc, char** argv) {
    src = imread(STRPAHT2);
    if (!src.data) {
        printf("could not load image...\n");
        return -1;
    }

    cvtColor(src, gray_src, CV_BGR2GRAY);
    createTrackbar("Threshold Value:", OUTPUT_TITLE, &t1_value, max_value, Canny_Demo);
    Canny_Demo(0, 0);

    waitKey(0);
    return 0;
}

void Canny_Demo(int, void*) {
    Mat edge_output;
    blur(gray_src, gray_src, Size(3, 3), Point(-1, -1), BORDER_DEFAULT);
    Canny(gray_src, edge_output, t1_value, t1_value * 2, 3, false);

    imshow(OUTPUT_TITLE, ~edge_output);
}

 


免責聲明!

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



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