如何在Python中使用OpenCV检测相似路径中的平行线?

2024-09-25 08:30:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我的任务是检测图像中所有的矩形物体。如果我在OpenCV中使用cv2.findContours函数,这非常简单。但是,我不能使用它。我被告知要检测所有平行线。我使用Hough变换来找到所有的直线,然后根据它们的斜率找到平行线。但不知何故,行数非常大,结果一点也不准确。在

下面是我的代码,有人知道如何修复它吗?在

import cv2
import numpy as np


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 = '/Users/James/Desktop/img.jpg'
    img = cv2.imread(inputFileName)

    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

    lines = cv2.HoughLinesP(gray, 1, np.pi / 180, 100, 30, 2)

    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) <= 0.6:
                        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)

    cv2.imshow('linesImg', img)
    cv2.waitKey(0)

source image


Tags: innoneimgforifislinenot