如何找到openCV中的hough线之间的距离?

我是opencv-python的新手。我通过houghtransformP找到了图像中的线条。从霍夫变换绘制的线是不连续的,并给出多条线。我只需要为边缘画一条线,然后找到所找到的线之间的“距离”即可。

输出图像如下所示

"""
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,255),2)


        left_x,bot_y,right_x,top_y = lineB[0]
        cv2.line(img,(left_x,bot_y),(right_x,top_y),2)

    cv2.imwrite('linesImg.jpg',img)

画线后输出图像:

如何找到openCV中的hough线之间的距离?

aqswdefr8888 回答:如何找到openCV中的hough线之间的距离?

主要是geometric task,不是特定于OpenCV。

对于每一行,您有两个点(x1,y1)和(x2,y2)已在getSlopeOfLine(line)方法中使用。 您可以用以下格式表示每一行:

ax + by + c = 0

为此,请使用两个已知线的点:

(y1 - y2)x + (x2 - x1)y + (x1y2 - x2y1) = 0

请注意,平行线具有相同的 a b ,而具有不同的 c

然后测量它们中任意两个之间的距离(非平行线之间的距离为零,因为它们具有交叉点):

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

本文链接:https://www.f2er.com/3126188.html

大家都在问