欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python?OpenCV?Canny邊緣檢測算法的原理實(shí)現(xiàn)詳解

 更新時(shí)間:2022年07月17日 11:38:10   作者:喬卿  
這篇文章主要介紹了Python?OpenCV?Canny邊緣檢測算法的原理實(shí)現(xiàn)詳解,由于邊緣檢測對(duì)噪聲敏感,因此對(duì)圖像應(yīng)用高斯平滑以幫助減少噪聲,具體詳情需要的小伙伴可以參考一下

Gaussian smoothing

總的來說,Canny邊緣檢測可以分為四個(gè)步驟:

由于邊緣檢測對(duì)噪聲敏感,因此對(duì)圖像應(yīng)用高斯平滑以幫助減少噪聲。
具體做法是,采用一個(gè)5*5的高斯平滑濾波器對(duì)圖像進(jìn)行濾波處理。

Computing the gradient magnitude and orientation

對(duì)平滑后的圖像,在水平、垂直兩個(gè)方向上使用Sobel算子(如下圖)計(jì)算梯度大小,得到兩個(gè)方向上的一階導(dǎo)數(shù)Gx與Gy。

在得到兩個(gè)方向上的梯度之后,對(duì)這兩個(gè)向量求和,得到這一點(diǎn)處的梯度大小與方向。

采用四舍五入,將梯度方向確定為上下左右與四個(gè)對(duì)角線方向之一(45°的倍數(shù))。

Non-maxima suppression

在得到梯度大小與方向之后,對(duì)圖像進(jìn)一步掃描,去除不構(gòu)成邊緣的不重要的像素信息,這里采用的方法是非極大值抑制——在每個(gè)像素處,檢查像素是否在其梯度方向的鄰域中是局部最大值,只保留局部最大值的梯度。

在上圖中,點(diǎn)A位于邊緣上。梯度方向與邊緣方向垂直。為了確定要不要保留A點(diǎn)作為邊緣,需要將A點(diǎn)處的梯度大小與B、C兩點(diǎn)的梯度大小比較,如果A點(diǎn)的梯度大小不是局部最大,則將該點(diǎn)抑制。

因此,從結(jié)果上講,NMS其實(shí)是將B、C兩點(diǎn)抑制了,它們不會(huì)出現(xiàn)在結(jié)果中,因此這一步的效果是“thin edges”。

Hysteresis thresholding

定義上界與下界兩個(gè)閾值,并規(guī)定:

  • 任何梯度強(qiáng)度大于上界的像素都是邊;
  • 任何梯度強(qiáng)度小于下界的像素都不是邊;
  • 任何梯度介于兩個(gè)閾值之間的可能是邊,此時(shí)考察它們的連通性,如果它們和第一種情況(確定是邊緣的像素)相連接,就認(rèn)為它們是邊緣,否則認(rèn)為它們不是邊緣。

在上圖中,A點(diǎn)在maxVal閾值之上,確定是邊緣。C介于兩個(gè)閾值之間,但與A相連,因此它也是邊緣。B介于兩個(gè)閾值之間,它所在的曲線上并沒有任何像素點(diǎn)的梯度強(qiáng)度在maxVal之上,因此它不是邊緣。

需要指出的是,上面四步操作之后得到的是strong edges。

OpenCV實(shí)現(xiàn)

OpenCV提供了cv.Canny()方法,該方法將輸入的原始圖像轉(zhuǎn)換為邊緣圖像。

該方法的原型為:

cv.Canny(image, threshold1, threshold2[, edges[, apertureSize[, L2gradient]]]) -> 	edges
cv.Canny(dx, dy, threshold1, threshold2[, edges[, L2gradient]]) -> edges

image參數(shù)是array格式的輸入圖像。threshold1與threshold2分別是我們的下界閾值與上界閾值。apertureSize是用于查找圖像梯度的Sobel核的大小,默認(rèn)為3。L2gradient指定了求梯度幅值的公式,是一個(gè)布爾型變量,默認(rèn)為False。當(dāng)它為True時(shí),使用L2,否則使用L1。

下面是具體代碼:

def canny_detect(image_path, show=True):
    # 讀取圖像
    image = cv2.imread(image_path, 0)
    # 獲取結(jié)果
    edges = cv2.Canny(image, 100, 200)
    if show:
        # 繪制原圖
        plt.subplot(121)
        plt.imshow(image, cmap='gray')
        plt.title('Original Image')
        plt.xticks([])
        plt.yticks([])
        # 繪制邊緣圖
        plt.subplot(122)
        plt.imshow(edges, cmap='gray')
        plt.title('Edge Image')
        plt.xticks([])
        plt.yticks([])

        plt.show()
    return edges
canny_detect('images/2.jpeg')

效果:

到此這篇關(guān)于Python OpenCV Canny邊緣檢測算法的原理實(shí)現(xiàn)詳解的文章就介紹到這了,更多相關(guān)Python OpenCV Canny邊緣檢測 內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python unittest如何生成HTMLTestRunner模塊

    Python unittest如何生成HTMLTestRunner模塊

    這篇文章主要介紹了Python unittest如何生成HTMLTestRunner模塊,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-09-09
  • django 使用 request 獲取瀏覽器發(fā)送的參數(shù)示例代碼

    django 使用 request 獲取瀏覽器發(fā)送的參數(shù)示例代碼

    這篇文章主要介紹了django 使用 request 獲取瀏覽器發(fā)送的參數(shù)示例代碼,獲取數(shù)據(jù)有四種方式,具體內(nèi)容詳情大家跟隨腳本之家小編一起看看吧
    2018-06-06
  • Python?lambda函數(shù)保姆級(jí)使用教程

    Python?lambda函數(shù)保姆級(jí)使用教程

    本文和你一起探索Python中的lambda函數(shù),讓你以最短的時(shí)間明白這個(gè)函數(shù)的原理。也可以利用碎片化的時(shí)間鞏固這個(gè)函數(shù),讓你在處理工作過程中更高效
    2022-06-06
  • python3 反射的四種基本方法解析

    python3 反射的四種基本方法解析

    這篇文章主要介紹了python3 反射的四種基本方法解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-08-08
  • 一個(gè)簡單的python程序?qū)嵗?通訊錄)

    一個(gè)簡單的python程序?qū)嵗?通訊錄)

    這篇文章主要分享了用python實(shí)現(xiàn)的一個(gè)通訊錄實(shí)例,學(xué)習(xí)python的朋友可以參考下
    2013-11-11
  • Python生命游戲?qū)崿F(xiàn)原理及過程解析(附源代碼)

    Python生命游戲?qū)崿F(xiàn)原理及過程解析(附源代碼)

    這篇文章主要介紹了Python生命游戲?qū)崿F(xiàn)原理及過程解析(附源代碼),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-08-08
  • Python中提取人臉特征的三種方法詳解

    Python中提取人臉特征的三種方法詳解

    這篇文章主要和大家分享三個(gè)Python中提取人臉特征的方法,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Python有一定的幫助,需要的可以參考一下
    2022-05-05
  • python中ndarray數(shù)組的索引和切片的使用

    python中ndarray數(shù)組的索引和切片的使用

    本文主要介紹了python中ndarray數(shù)組的索引和切片的使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • 兒童python練習(xí)實(shí)例

    兒童python練習(xí)實(shí)例

    小編在網(wǎng)上整理了關(guān)于兒童python相關(guān)編程的練習(xí)實(shí)例,如果有小朋友對(duì)此感興趣可以學(xué)習(xí)下。
    2018-05-05
  • Python求兩個(gè)圓的交點(diǎn)坐標(biāo)或三個(gè)圓的交點(diǎn)坐標(biāo)方法

    Python求兩個(gè)圓的交點(diǎn)坐標(biāo)或三個(gè)圓的交點(diǎn)坐標(biāo)方法

    今天小編就為大家分享一篇Python求兩個(gè)圓的交點(diǎn)坐標(biāo)或三個(gè)圓的交點(diǎn)坐標(biāo)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-11-11

最新評(píng)論