OpenCV霍夫變換直線檢測,Python

假設需要把圖片

中的直線檢測出來並用紅線標記:

import cv2
import numpy as np

if __name__ == "__main__":
    original_img = cv2.imread("p.jpg")
    gray = cv2.cvtColor(original_img, cv2.COLOR_BGR2GRAY)
    blur_img = cv2.GaussianBlur(gray, (3, 3), 0)
    edges = cv2.Canny(blur_img, 50, 150, apertureSize=3)

    rho = 1  # 線段以像素爲單位的精度,double類型,1.0爲1個像素
    theta = np.pi / 180  # 通過步長爲1的半徑和步長爲π/180的角度,搜索所有可能的直線。
    threshold = 10  # 累加平面的閾值,int,超過設定閾值才被判定檢測出線段,值越大,檢出的線段個數越少。
    minLineLength = 20  # 能組成一條直線的最少點的數量. 點數量不足的直線將被拋棄.如果小於該值,則不被認爲是一條直線.
    maxLineGap = 10  # 能被認爲在一條直線上的亮點的最大距離.同一方向上兩條線段斷定爲一條線段的最大容許間隔(斷裂).直線間隙最大值,如果兩條直線間隙大於該值,則被認爲是兩條線段,否則是一條。

    lines = cv2.HoughLinesP(edges, rho, theta, threshold,
                            minLineLength, maxLineGap)
    print(type(lines))

    for l in lines.tolist():
        x1, y1, x2, y2 = l[0]
        cv2.line(original_img, (x1, y1), (x2, y2),
                 color=(0, 0, 255), thickness=1)

    cv2.imshow('Canny', edges)
    cv2.imshow('Result', original_img)

    cv2.waitKey(0)
    cv2.destroyAllWindows()

 

結果:

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章