【OpenCV】cv2.HoughLines()霍夫直線(xiàn)檢測(cè)
0. 介紹
霍夫直線(xiàn)檢測(cè)(Hough Line Transform)是一種在圖像中檢測(cè)直線(xiàn)的經(jīng)典算法。它通過(guò)將二維圖像空間中的點(diǎn)映射到極坐標(biāo)空間中,將直線(xiàn)檢測(cè)問(wèn)題轉(zhuǎn)化為在參數(shù)空間中找到交點(diǎn)的問(wèn)題。
原理:
- 對(duì)于圖像空間中的每個(gè)邊緣點(diǎn),計(jì)算其對(duì)應(yīng)在極坐標(biāo)空間中可能的直線(xiàn)。
- 極坐標(biāo)空間中的直線(xiàn)由兩個(gè)參數(shù)表示:極徑(rho)和極角(theta)。
- 極徑rho表示直線(xiàn)到圖像中心的距離,極角theta表示直線(xiàn)與x軸的夾角。
- 極坐標(biāo)空間中,使用累加器來(lái)記錄每個(gè)參數(shù)組合的投票數(shù),投票數(shù)高的參數(shù)組合表示在圖像空間中存在一條直線(xiàn)。
- 根據(jù)設(shè)定的閾值,選擇投票數(shù)高于閾值的直線(xiàn)參數(shù)作為檢測(cè)結(jié)果。
應(yīng)用:
- 邊緣檢測(cè):霍夫直線(xiàn)檢測(cè)常用于圖像邊緣檢測(cè)后的處理,可以進(jìn)一步分析并提取直線(xiàn)特征。
- 車(chē)道線(xiàn)檢測(cè):在自動(dòng)駕駛和駕駛輔助系統(tǒng)中,霍夫直線(xiàn)檢測(cè)被廣泛應(yīng)用于檢測(cè)和識(shí)別道路上的車(chē)道線(xiàn)。
- 圖像拼接:在全景圖像拼接中,霍夫直線(xiàn)檢測(cè)可以用于檢測(cè)重疊區(qū)域的直線(xiàn)特征,并對(duì)圖像進(jìn)行對(duì)齊和融合。
- 文檔分析:在文檔圖像處理中,霍夫直線(xiàn)檢測(cè)可用于檢測(cè)表格的邊界、文字行的分割等任務(wù)。
- 工業(yè)自動(dòng)化:霍夫直線(xiàn)檢測(cè)可以應(yīng)用于工業(yè)環(huán)境中的缺陷檢測(cè)、位置定位等。
需要注意的是,霍夫直線(xiàn)檢測(cè)對(duì)于噪聲和圖像質(zhì)量較為敏感,可能需要進(jìn)行圖像預(yù)處理和參數(shù)調(diào)整來(lái)獲取準(zhǔn)確的直線(xiàn)檢測(cè)結(jié)果。此外,霍夫直線(xiàn)檢測(cè)還有一些改進(jìn)算法,例如概率霍夫直線(xiàn)變換等,用于提高檢測(cè)的效率和準(zhǔn)確性。
1. 函數(shù)
cv.HoughLines(image, rho, theta, threshold[, lines[, srn[, stn[, min_theta[, max_theta]]]]]) -> lines
參數(shù):文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-745566.html
- lines:數(shù)組,每一個(gè)元素都是一條直線(xiàn)對(duì)應(yīng)的(ρ, θ),ρ以像素為單位,θ以弧度為單位。
- image:輸入圖像,需要是二值圖像,所以在應(yīng)用hough變換之前應(yīng)用閾值或canny邊緣檢測(cè)。
- rho:ρ的精度。
- theta:θ的精度。
- threshold:閾值,得票數(shù)高于該值的線(xiàn)才被認(rèn)為是線(xiàn),由于投票數(shù)取決于線(xiàn)上的點(diǎn)數(shù),所以它代表了應(yīng)該被檢測(cè)到的線(xiàn)的最小點(diǎn)數(shù)。
2. 代碼
import cv2
import numpy as np
img = cv2.imread('a.jpg')
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
edges = cv2.Canny(gray,50,150,apertureSize = 3)
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(img,(x1,y1),(x2,y2),(0,0,255),2)
cv2.imwrite('houghlines3.jpg',img)
3. 效果
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-745566.html
到了這里,關(guān)于【OpenCV】cv2.HoughLines()霍夫直線(xiàn)檢測(cè)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!