最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

直線檢測(cè)原理

核心要點(diǎn):圖像坐標(biāo)空間、參數(shù)空間、極坐標(biāo)參數(shù)空間 -> (極坐標(biāo))參數(shù)空間表決

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

由于上述寫法不適合處理水平或垂直的直線,我們可以使用極坐標(biāo)的形式描述直線,即ρ=xcosθ+ysinθ,其中ρ是從原點(diǎn)到直線的垂直距離,θ是由這條垂直線和水平軸形成的角度(以逆時(shí)針?lè)较驕y(cè)量),

如下圖所示:

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

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

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

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

總的來(lái)說(shuō),對(duì)于多個(gè)點(diǎn),我們可以用(離散)參數(shù)空間表決的方法,記錄每個(gè)點(diǎn)對(duì)應(yīng)的允許的參數(shù)組合,求得那些被允許次數(shù)最多的參數(shù)組合,就是最多點(diǎn)經(jīng)過(guò)的直線。

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

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

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

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

參數(shù):

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

下面是具體代碼:

def hough_detect(image_path):
    # 讀取圖像并轉(zhuǎn)換為灰度圖像
    image = cv2.imread(image_path)
    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    # 使用Canny算子檢測(cè)邊緣
    edges = canny_detect(image_path, False)
    # 使用Hough檢測(cè)直線
    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直線檢測(cè)算法的原理實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Python OpenCV Hough 內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python3實(shí)現(xiàn)簡(jiǎn)單飛機(jī)大戰(zhàn)

    python3實(shí)現(xiàn)簡(jiǎn)單飛機(jī)大戰(zhàn)

    這篇文章主要為大家詳細(xì)介紹了python3實(shí)現(xiàn)簡(jiǎn)單飛機(jī)大戰(zhàn),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-11-11
  • Python字符編碼判斷方法分析

    Python字符編碼判斷方法分析

    這篇文章主要介紹了Python字符編碼判斷方法,結(jié)合實(shí)例形式分析了Python字符編碼的判斷技巧,并給出了chardet的安裝與使用方法,需要的朋友可以參考下
    2016-07-07
  • Python使用matplotlib繪制隨機(jī)漫步圖

    Python使用matplotlib繪制隨機(jī)漫步圖

    這篇文章主要為大家詳細(xì)介紹了使用Python生成隨機(jī)漫步數(shù)據(jù),使用matplotlib繪制隨機(jī)漫步圖,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-08-08
  • python將秒數(shù)轉(zhuǎn)化為時(shí)間格式的實(shí)例

    python將秒數(shù)轉(zhuǎn)化為時(shí)間格式的實(shí)例

    今天小編就為大家分享一篇python將秒數(shù)轉(zhuǎn)化為時(shí)間格式的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-09-09
  • Python實(shí)現(xiàn)8種常用抽樣方法

    Python實(shí)現(xiàn)8種常用抽樣方法

    抽樣是統(tǒng)計(jì)學(xué)、機(jī)器學(xué)習(xí)中非常重要,本文就用Python實(shí)現(xiàn)抽樣方法,主要介紹了八種方法,感興趣的小伙伴們可以參考一下
    2021-06-06
  • python 批量解壓壓縮文件的實(shí)例代碼

    python 批量解壓壓縮文件的實(shí)例代碼

    這篇文章主要介紹了python 批量解壓壓縮文件的實(shí)例代碼,代碼簡(jiǎn)單易懂,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-06-06
  • Python語(yǔ)法詳解之decorator裝飾器

    Python語(yǔ)法詳解之decorator裝飾器

    裝飾器 decorator 或者稱為包裝器,是對(duì)函數(shù)的一種包裝,今天通過(guò)本文給大家分享Python語(yǔ)法詳解之decorator裝飾器的相關(guān)知識(shí),感興趣的朋友一起看看吧
    2021-10-10
  • Python簡(jiǎn)單刪除目錄下文件以及文件夾的方法

    Python簡(jiǎn)單刪除目錄下文件以及文件夾的方法

    這篇文章主要介紹了Python簡(jiǎn)單刪除目錄下文件以及文件夾的方法,涉及Python使用shutil模塊操作文件的相關(guān)技巧,需要的朋友可以參考下
    2015-05-05
  • python+OpenCV實(shí)現(xiàn)車牌號(hào)碼識(shí)別

    python+OpenCV實(shí)現(xiàn)車牌號(hào)碼識(shí)別

    這篇文章主要介紹了python+OpenCV實(shí)現(xiàn)車牌號(hào)碼識(shí)別,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-11-11
  • python3使用騰訊企業(yè)郵箱發(fā)送郵件的實(shí)例

    python3使用騰訊企業(yè)郵箱發(fā)送郵件的實(shí)例

    今天小編就為大家分享一篇python3使用騰訊企業(yè)郵箱發(fā)送郵件的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-06-06

最新評(píng)論

定西市| 石林| 梅州市| 蒙阴县| 克什克腾旗| 乌拉特后旗| 石渠县| 汉中市| 美姑县| 那曲县| 五家渠市| 呼伦贝尔市| 朝阳市| 阿鲁科尔沁旗| 景德镇市| 咸宁市| 昌乐县| 新沂市| 仙游县| 湘潭市| 辽宁省| 资中县| 台州市| 纳雍县| 泰顺县| 清苑县| 阜城县| 许昌县| 平利县| 桐城市| 淅川县| 昭觉县| 甘孜县| 皋兰县| 天峻县| 堆龙德庆县| 安国市| 紫云| 密山市| 林州市| 浦县|