【OpenCV】cv2.HoughLines()霍夫直线检测
0. 介绍
霍夫直线检测(Hough Line Transform)是一种在图像中检测直线的经典算法。它通过将二维图像空间中的点映射到极坐标空间中,将直线检测问题转化为在参数空间中找到交点的问题。
原理:
- 对于图像空间中的每个边缘点,计算其对应在极坐标空间中可能的直线。
- 极坐标空间中的直线由两个参数表示:极径(rho)和极角(theta)。
- 极径rho表示直线到图像中心的距离,极角theta表示直线与x轴的夹角。
- 极坐标空间中,使用累加器来记录每个参数组合的投票数,投票数高的参数组合表示在图像空间中存在一条直线。
- 根据设定的阈值,选择投票数高于阈值的直线参数作为检测结果。
应用:
- 边缘检测:霍夫直线检测常用于图像边缘检测后的处理,可以进一步分析并提取直线特征。
- 车道线检测:在自动驾驶和驾驶辅助系统中,霍夫直线检测被广泛应用于检测和识别道路上的车道线。
- 图像拼接:在全景图像拼接中,霍夫直线检测可以用于检测重叠区域的直线特征,并对图像进行对齐和融合。
- 文档分析:在文档图像处理中,霍夫直线检测可用于检测表格的边界、文字行的分割等任务。
- 工业自动化:霍夫直线检测可以应用于工业环境中的缺陷检测、位置定位等。
需要注意的是,霍夫直线检测对于噪声和图像质量较为敏感,可能需要进行图像预处理和参数调整来获取准确的直线检测结果。此外,霍夫直线检测还有一些改进算法,例如概率霍夫直线变换等,用于提高检测的效率和准确性。
1. 函数
cv.HoughLines(image, rho, theta, threshold[, lines[, srn[, stn[, min_theta[, max_theta]]]]]) -> lines
参数:文章来源:https://www.toymoban.com/news/detail-745566.html
- lines:数组,每一个元素都是一条直线对应的(ρ, θ),ρ以像素为单位,θ以弧度为单位。
- image:输入图像,需要是二值图像,所以在应用hough变换之前应用阈值或canny边缘检测。
- rho:ρ的精度。
- theta:θ的精度。
- threshold:阈值,得票数高于该值的线才被认为是线,由于投票数取决于线上的点数,所以它代表了应该被检测到的线的最小点数。
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. 效果
文章来源地址https://www.toymoban.com/news/detail-745566.html
到了这里,关于【OpenCV】cv2.HoughLines()霍夫直线检测的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!