如何在openCV中找到休止线之间的距离?

问题描述 投票:0回答:1

我是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, 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)

画线后输出图像:

enter image description here

opencv python-3.6 distance houghlinesp
1个回答
0
投票

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

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

ax + by + c = 0

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

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

注意,平行线具有相同的[[ab,而不同的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闭合)。您可以考虑将行的移动合并成几条平行的线。
© www.soinside.com 2019 - 2024. All rights reserved.