2

我是新手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)

画线后输出图像:

在此处输入图像描述

4

1 回答 1

1

它主要是几何任务,而不是特定于 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位移在哪里。现在您只需匹配平行线(一条带有 close k)。您可以考虑线的偏移,将多条平行线合并为一条。

于 2019-11-11T11:48:01.327 回答