cv2.HoughLines
使用函数cv2.HoughLines(),返回(ρ,θ),ρ的单位是像素,θ是弧度,三轴矩阵。
输入参数:第一个参数是二值化图像,进行霍夫变换之前要进行二值化或者canny边缘检测。第二第三个参数代表ρ和θ的精度。第四个参数是阈值,只有当累加器中的值高于阈值时才被当成是直线。
ρ表示从原点到直线的垂直距离,θ表示直线的垂线与横轴顺时针方向的夹角
霍夫变换参考
说到弧度,我已经忘了弧度制的计算了,打扰了,特地查了一下。
1°=π/180 rad,1 rad = (180/π)°≈57.30°=57°18ˊ
(我这里设置的是大概角度偏差在五度以内的直线算作同一条直线)
我对于opencv定位十字交叉点(python)中的代码稍微做了一些调整,原文的代码有句pop(5),我没有看懂,如果线条多于五条,那么pop(5)是什么意思呢?不过,修改后的代码适应了我的图像,附上代码:
import cv2
import numpy as np
import matplotlib.pyplot as plt
def cleanlines(lines):
# 清除重复的线条
for lineindex, line in enumerate(lines):
if line[0]<0:
lines[lineindex][0] = -line[0] # rho
lines[lineindex][1] = line[1]-np.pi # theta
newlines = lines
l_lines = len(lines)
i = 0
while i < l_lines:
flag = 0
j = i+1
while j < l_lines:
flag = 0
# rho和theta值比较相似或者在一定的范围内的线条归结为一条线(5度以内)
if (abs(lines[i][1]-lines[j][1])<0.1):
flag = 1
lines.pop(j)
l_lines -= 1
#print('lines[i]={},lines[j]={},flag={}'.format(lines[i],lines[j],flag))
j +=