zoukankan      html  css  js  c++  java
  • OpenCv:边缘处理&Canny边缘检测

    卷积边缘:

    一、在进行卷积的时候,对于原图像(1,1)的位置,左、上方没有足够的像素做卷积。

    二、通常,在卷积之前,在原图增加边缘像素,比如(3*3的,增加一个像素)

    三、增加像素值得处理方法,通常有:

    (一)BORDER_DEFAULT。默认

    (二)BORDER_CONSTANT。使用固定的值。

    (三)BORDER_REPLICATE。使用已知边缘的像素值。

    (四)BORDER_WRAP。用另一边的像素值来补偿填充。

    四、API

    copyMakeBorder(
    Mat src,
    Mat dst,
    int top,//边缘宽度,一般上下左右都一样
    int bottom,
    int left,
    int right,
    int borderType,//类型
    Scalar value //颜色限制
    )

    五、例子

    原图

    BORDER_DEFAULT

    BORDER_REPLICATE

    BORDER_WRAP

     


     Canny边缘检测

    一、算法介绍

    (一)高斯模糊——GaussianBlur。就是对图像进行降噪。

    (二)灰度转换——cvtColor。

    (三)计算梯度——Sobel/Scharr。得到   |X| + |Y|。

    (四)非最大信号抑制。由于Sobel后,边沿非常强(粗),甚至起“皱褶”。因此要处理。

    (五)高低阈值输出二值图像。

     二、详细介绍

    (一)梯度。Sobel

    Gx:将kernel内,水平方向的所有变化量,全部集中在【锚点】处,而且【锚点】同行,还*2,突出其权重。

    G如果大于某个阈值,那么此位置就可能是边缘了。

    G通常用G = |Gx| +|Gy|

    (二)非最大信号抑制

      1、梯度方向。在哪个方向变化最大。

      

      θ在0~180度之间

      2、抑制。

        (1)找到θ

        (2)比如θ=90度,找到90±45度的像素(左上、右上)

        (3)如果像素值,大于左上、右上,那么保留。否则舍弃。

    (三)高低阈值输出二值图像。

      1、定义2个阈值:高值T1、低值T2。

      2、大于T1,保留;小于T2,丢弃。

      3、从高于T1的像素开始寻找,大于T2且相互链接的,都保留。

      4、推荐T1:T2 = 3:1,或者2:1。

     三、API介绍

    Canny(
    Mat src, //8-bit(位)的灰度图
    Mat dst,
    double T2, //低阈值,此值越高,得到的边缘越少,最终只留最强的边缘
    double T1, //高阈值,通常为255
    int aptertureSize,//Soble算子的Size,通常3*3的,所以这里填3
    bool L2gradient //true表示是L2来归一化,否则用L1归一化,一般为false
    )
    
    //L2gradient ,使用L2,则用G = sqrt(gx*gx + gy* gy)来求梯度,否则用
    //G = |gx| + |gy|来近似

    四、例子

    Mat gaussianBlur, gray, canny;  
        cvtColor(src, gray, COLOR_BGR2GRAY);
        Canny(gray, canny, 85, 255, 3); 
        imshow("canny", canny);

    随着低阈值的变化,而变化

  • 相关阅读:
    hdu 1542 Atlantis
    cf C. Cupboard and Balloons
    cf C. Tourist Problem
    hdu 4027 Can you answer these queries?
    hdu 1255 覆盖的面积
    hdu 1698 Just a Hook
    zoj 1610 Count the Colors
    hdu 4302 Holedox Eating
    hdu 4288 Coder
    tsne理论学习
  • 原文地址:https://www.cnblogs.com/pylblog/p/14758415.html
Copyright © 2011-2022 走看看