如何在openCV中查找hough线之间的距离?
我不熟悉如何在openCV中查找hough线之间的距离?,opencv,python-3.6,distance,houghlinesp,Opencv,Python 3.6,Distance,Houghlinesp,我不熟悉opencvpython。我通过houghtransformP找到了图像中的行。从hough变换绘制的线被中断,并给出多条线。我只需要为边画一条线,然后找到找到的线之间的“距离” 输出图像如下所示 """ Created on Fri Nov 8 11:41:16 2019 @author: romanth.chowan """ import cv2 import numpy as np import math def getSlopeOfLine(line): xDi
opencvpython
。我通过houghtransformP
找到了图像中的行。从hough变换绘制的线被中断,并给出多条线。我只需要为边画一条线,然后找到找到的线之间的“距离”
输出图像如下所示
"""
Created on Fri Nov 8 11:41:16 2019
@author: romanth.chowan
"""
import cv2
import numpy as np
import math
def getSlopeOfLine(line):
xDis = line[0][2] - line[0][0]
if (xDis == 0):
return None
return (line[0][3] - line[0][1]) / xDis
if __name__ == '__main__':
inputFileName_ =r"C:\Users\romanth.chowan\Desktop\opencv\stent spec\2prox.jpeg"
img = cv2.imread(inputFileName_)
img1=cv2.GaussianBlur(img,(5,5),0)
gray = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY)
edges = cv2.Laplacian(gray,cv2.CV_8UC1) # Laplacian Edge Detection
lines = cv2.HoughLinesP(edges, 1, np.pi / 180, 300, 10, 10)
print(len(lines))
parallelLines = []
for a in lines:
for b in lines:
if a is not b:
slopeA = getSlopeOfLine(b)
slopeB = getSlopeOfLine(b)
if slopeA is not None and slopeB is not None:
if 0 <= abs(slopeA - slopeB) <= 10:
parallelLines.append({'lineA': a, 'lineB': b})
for pairs in parallelLines:
lineA = pairs['lineA']
lineB = pairs['lineB']
leftx, boty, rightx, topy = lineA[0]
cv2.line(img, (leftx, boty), (rightx, topy), (0, 0, 255), 2)
left_x, bot_y, right_x, top_y = lineB[0]
cv2.line(img, (left_x, bot_y), (right_x, top_y), (0, 0, 255), 2)
cv2.imwrite('linesImg.jpg', img)
“”“
创建于2019年11月8日星期五11:41:16
@作者:romanth.chowan
"""
进口cv2
将numpy作为np导入
输入数学
def getSlopeOfLine(行):
xDis=第[0][2]行-第[0][0]行
如果(xDis==0):
一无所获
返回(行[0][3]-行[0][1])/xDis
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
inputFileName\ur=C:\Users\romath.chowan\Desktop\opencv\stent spec\2prox.jpeg
img=cv2.imread(输入文件名)
img1=cv2.GaussianBlur(img,(5,5),0)
灰色=cv2.CVT颜色(img1,cv2.COLOR\U BGR2GRAY)
边缘=cv2.拉普拉斯(灰色,cv2.CV_8UC1)#拉普拉斯边缘检测
线=cv2.HoughLinesP(边,1,np.pi/180300,10,10)
打印(len(行))
平行线=[]
对于同一行中的
对于行中的b:
如果a不是b:
slopeA=getSlopeOfLine(b)
slopeB=getSlopeOfLine(b)
如果slopeA不是None,slopeB不是None:
如果00,则大多数情况下,不是针对OpenCV的
对于每一行,您有两个点(x1,y1)和(x2,y2),它们已经在getSlopeOfLine(line)
方法中使用。
您可以用以下形式表示每一行:
ax+by+c=0
为此,请使用两个已知的直线点:
(y1-y2)x+(x2-x1)y+(x1y2-x2y1)=0
注:平行线具有相同的
和
,而不同的
然后测量任意两条线之间的距离(非平行线之间的距离等于零,因为它们有交叉点):
d=abs(c2-c1)/sqrt(a*a+b*b)
在欧几里德几何中,线可以用几种方式表示,其中一种方式比另一种方式更适合于特定的任务
目前,您正在评估直线的坡度,根据上面的公式,我们可以得到:
y=(-b/a)x-c/b
与(b现在有另一个含义)相同
y=kx+b
或者使用两条直线的点:
y=(x1-x2)/(y1-y2)*x+(x1y2-x2y1)
其中,k
是直线的斜率(tan(alpha)
),而b
是位移。
现在您只需匹配平行线(一条具有接近的k
)。您可以考虑行的移位,将多条平行线合并为一条。这主要是OpenCV特有的
对于每一行,您有两个点(x1,y1)和(x2,y2),它们已经在getSlopeOfLine(line)
方法中使用。
您可以用以下形式表示每一行:
ax+by+c=0
为此,请使用两个已知的直线点:
(y1-y2)x+(x2-x1)y+(x1y2-x2y1)=0
注:平行线具有相同的
和
,而不同的
然后测量任意两条线之间的距离(非平行线之间的距离等于零,因为它们有交叉点):
d=abs(c2-c1)/sqrt(a*a+b*b)
在欧几里德几何中,线可以用几种方式表示,其中一种方式比另一种方式更适合于特定的任务
目前,您正在评估直线的坡度,根据上面的公式,我们可以得到:
y=(-b/a)x-c/b
与(b现在有另一个含义)相同
y=kx+b
或者使用两条直线的点:
y=(x1-x2)/(y1-y2)*x+(x1y2-x2y1)
其中,k
是直线的斜率(tan(alpha)
),而b
是位移。
现在您只需匹配平行线(一条具有接近的k
)。您可以考虑线的偏移,将多条平行线合并为一条