OpenCV 霍夫线检测
生活随笔
收集整理的這篇文章主要介紹了
OpenCV 霍夫线检测
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
實現流程
- 假設有一個大小為100*?100的圖片,使用霍夫變換檢測圖片中的直線,則步驟如下所示:
直線都可以使用(ρ,θ) 表示,首先創建一個2D數組,我們叫做累加器,初始化所有值為0,行表示ρ,列表示θ。
該數組的大小決定了結果的準確性,若希望角度的精度為1度,那就需要180列。對于ρ,最大值為圖片對角線的距離,如果希望精度達到像素級別,行數應該與圖像的對角線的距離相等。
取直線上的第一個點(x,y)(x,y),將其帶入直線在極坐標中的公式中,然后遍歷θ的取值:0,1,2,…,180,分別求出對應的ρ值,如果這個數值在上述累加器中存在相應的位置,則在該位置上加1.
取直線上的第二個點,重復上述步驟,更新累加器中的值。對圖像中的直線上的每個點都直線以上步驟,每次更新累加器中的值。
搜索累加器中的最大值,并找到其對應的(ρ,θ),就可將圖像中的直線表示出來。
cv.HoughLines(img, rho, theta, threshold)
-
img: 檢測的圖像,要求是二值化的圖像,所以在調用霍夫變換之前首先要進行二值化,或者進行Canny邊緣檢測
-
rho、theta: ρ 和 θ的精確度
-
threshold: 閾值,只有累加器中的值高于該閾值時才被認為是直線。
注意:該方法輸入是的二值化圖像,在進行檢測前要將圖像進行二值化處理
import numpy as np import random import cv2 as cv import matplotlib.pyplot as plt # 1.加載圖片,轉為二值圖 img = cv.imread('./1.png')gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY) edges = cv.Canny(gray, 530, 850)# 2.霍夫直線變換 lines = cv.HoughLines(edges, 0.1, np.pi / 90, 75)# 3.將檢測的線繪制在圖像上(注意是極坐標噢) for line in lines:rho, theta = line[0]a = np.cos(theta)b = np.sin(theta)x0 = a * rhoy0 = b * rhox1 = int(x0 + 1000 * (-b))y1 = int(y0 + 1000 * (a))x2 = int(x0 - 1000 * (-b))y2 = int(y0 - 1000 * (a))cv.line(img, (x1, y1), (x2, y2), (0, 255, 0))# 4. 圖像顯示 plt.figure(figsize=(10, 8), dpi=100) plt.imshow(img[:, :, ::-1]), plt.title('霍夫變換直線檢測') plt.xticks([]), plt.yticks([]) plt.show()原圖
霍夫變換直線檢測
總結
以上是生活随笔為你收集整理的OpenCV 霍夫线检测的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: OpenCV Canny边缘检测
- 下一篇: OpenCV 霍夫圆检测