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

Python OpenCV Hough直線檢測算法的原理實現(xiàn)

 更新時間:2022年07月17日 11:21:37   作者:喬卿  
這篇文章主要介紹了Python OpenCV Hough直線檢測算法的原理實現(xiàn),文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的朋友可以參考一下

直線檢測原理

核心要點:圖像坐標空間、參數(shù)空間、極坐標參數(shù)空間 -> (極坐標)參數(shù)空間表決

給定一個點,我們一般會寫成y=ax+b的形式,這是坐標空間的寫法;我們也可以寫成b=-xa+y的形式,這是參數(shù)空間的寫法。也就是說,給定一個點,那么經(jīng)過該點的直線的參數(shù)必然滿足b=-xa+y這一條件,也就是必然在參數(shù)空間中b=-xa+y這條直線上。如果給定兩個點,那么這兩點確定的唯一的直線的參數(shù),就是參數(shù)空間中兩條參數(shù)直線的交點。

由于上述寫法不適合處理水平或垂直的直線,我們可以使用極坐標的形式描述直線,即ρ=xcosθ+ysinθ,其中ρ是從原點到直線的垂直距離,θ是由這條垂直線和水平軸形成的角度(以逆時針方向測量),

如下圖所示:

因此,任何垂直線θ=0,水平線θ=90°。那么極坐標參數(shù)空間中的曲線交點就是由兩個點確定的一條直線,如下圖所示。

現(xiàn)在讓我們看看Hough變換是如何處理直線的。任何一條線都可以用這兩個參數(shù)來表示(ρ,θ)。

  • 首先創(chuàng)建一個二維數(shù)組,即累加器,用來保存兩個參數(shù)的值,然后最初將其設(shè)置為全0。讓行表示ρ,列表示θ。數(shù)組的尺寸取決于所需的精度。假設(shè)希望角度的精度為1度,則需要180列,枚舉0°-179°的所有情況。對于ρ,可能的最大距離是圖像的對角線長度。因此,以一個像素的精度計算,行數(shù)可以是圖像的對角線長度。
  • 枚舉所有的點,對于每一個點,將所有經(jīng)過這一點的直線對應的參數(shù)(ρ,θ)在參數(shù)空間中找到對應位置,令該位置的累加器加1,即投票。這一過程如下圖所示。

枚舉完成所有點之后,累加器中值最大的(若干個)參數(shù)組合(ρ,θ)就是經(jīng)過點最多的(若干條)直線,如下圖所示,兩條直線對應累加器中最亮的兩個點。

總的來說,對于多個點,我們可以用(離散)參數(shù)空間表決的方法,記錄每個點對應的允許的參數(shù)組合,求得那些被允許次數(shù)最多的參數(shù)組合,就是最多點經(jīng)過的直線。

在圖像矯正任務(wù)中,我們經(jīng)過Canny算子檢測出了若干邊緣點,這些點主要集中在四個邊界上,因此我們只需要使用Hough直線檢測,求出四條直線,就能確定四個邊界。

OpenCV實現(xiàn)

cv.HoughLines()封裝了上述步驟,該函數(shù)原型為:

cv.HoughLines(image, rho, theta, threshold[, lines[, srn[, stn[, min_theta[, max_theta]]]]]) -> lines

參數(shù):

  • lines:數(shù)組,每一個元素都是一條直線對應的(ρ, θ),ρ以像素為單位,θ以弧度為單位。
  • image:輸入圖像,需要是二值圖像,所以在應用hough變換之前應用閾值或canny邊緣檢測。
  • rho:ρ的精度。
  • theta:θ的精度。
  • threshold:閾值,得票數(shù)高于該值的線才被認為是線,由于投票數(shù)取決于線上的點數(shù),所以它代表了應該被檢測到的線的最小點數(shù)。

下面是具體代碼:

def hough_detect(image_path):
    # 讀取圖像并轉(zhuǎn)換為灰度圖像
    image = cv2.imread(image_path)
    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    # 使用Canny算子檢測邊緣
    edges = canny_detect(image_path, False)
    # 使用Hough檢測直線
    lines = cv2.HoughLines(edges, 1, np.pi/180, 200)
    # 繪制直線
    for line in lines:
        rho, theta = line[0]
        a = np.cos(theta)
        b = np.sin(theta)
        x0 = a * rho
        y0 = b * rho
        x1 = int(x0 + 1000*(-b))
        y1 = int(y0 + 1000*(a))
        x2 = int(x0 - 1000*(-b))
        y2 = int(y0 - 1000*(a))
        cv2.line(image, (x1, y1), (x2, y2), (0, 0, 255), 2)
    cv2.imshow('line,jpg', image)
    cv2.waitKey()
hough_detect('images/2.jpeg')

效果:

后面需要調(diào)整一下超參數(shù)。

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

相關(guān)文章

  • pandas 使用apply同時處理兩列數(shù)據(jù)的方法

    pandas 使用apply同時處理兩列數(shù)據(jù)的方法

    下面小編就為大家分享一篇pandas 使用apply同時處理兩列數(shù)據(jù)的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-04-04
  • Python實現(xiàn)手勢識別

    Python實現(xiàn)手勢識別

    這篇文章主要介紹了Python如何實現(xiàn)手指指尖的檢測,并且可以在windows系統(tǒng)下通過判斷手指數(shù)目,來模擬鍵盤操作,感興趣的朋友可以了解下
    2020-10-10
  • 對python判斷是否回文數(shù)的實例詳解

    對python判斷是否回文數(shù)的實例詳解

    今天小編就為大家分享一篇對python判斷是否回文數(shù)的實例詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-02-02
  • Python?識別錄音并轉(zhuǎn)為文字的實現(xiàn)

    Python?識別錄音并轉(zhuǎn)為文字的實現(xiàn)

    本文主要介紹了Python?識別錄音并轉(zhuǎn)為文字的實現(xiàn),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • python實現(xiàn)各種插值法(數(shù)值分析)

    python實現(xiàn)各種插值法(數(shù)值分析)

    這篇文章主要介紹了python實現(xiàn)各種插值法(數(shù)值分析),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-07-07
  • 淺談python圖片處理Image和skimage的區(qū)別

    淺談python圖片處理Image和skimage的區(qū)別

    這篇文章主要介紹了淺談python圖片處理Image和skimage的區(qū)別,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-08-08
  • python實現(xiàn)簡易版學生成績管理系統(tǒng)

    python實現(xiàn)簡易版學生成績管理系統(tǒng)

    這篇文章主要為大家詳細介紹了python實現(xiàn)簡易版學生成績管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-06-06
  • 使用 Python 解析配置文件格式

    使用 Python 解析配置文件格式

    選擇配置格式是一種微妙的權(quán)衡。但是,一旦你做出決定,Python 就可以使用少量代碼來解析大多數(shù)流行的格式。今天通過本文給大家分享 Python 解析配置文件格式的問題,感興趣的朋友一起看看吧
    2021-07-07
  • Python itertools.product方法代碼實例

    Python itertools.product方法代碼實例

    這篇文章主要介紹了Python itertools.product方法代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-03-03
  • Python 下載Bing壁紙的示例

    Python 下載Bing壁紙的示例

    這篇文章主要介紹了Python 下載Bing壁紙的示例,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2020-09-09

最新評論