如何在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
)。您可以考虑线的偏移,将多条平行线合并为一条