Как я могу улучшить результаты HoughLinesP () в моем скрипте OpenCV Python - PullRequest
0 голосов
/ 01 апреля 2020

Я пытаюсь получить все строки на этом изображении:

enter image description here

Это код, который я использую:

threshold = 30
minLineLength =10
maxLineGap = 10
lines = cv2.HoughLinesP(img,1,np.pi/360, threshold, minLineLength, maxLineGap)

Проблема в том, что я получаю слишком много строк (~ 300):

enter image description here

Но если я увеличу пороговое значение, это начинает пропустить некоторые строки:

enter image description here

Есть ли способ уменьшить количество линий при сохранении точности обнаружения линий?

Заранее спасибо!

1 Ответ

0 голосов
/ 02 апреля 2020

У меня это работает (в основном) нормально на Python / OpenCV. Скорректируйте свои аргументы строки HoughP в соответствии с требованиями.

Я думаю, вам нужно сначала пороговое изображение. И, возможно, тонкие белые линии.

Ввод:

enter image description here

import cv2
import numpy as np

# read image as color not grayscale
img = cv2.imread("lines.png", cv2.IMREAD_COLOR)

# convert img to grayscale
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# do threshold
thresh = cv2.threshold(gray, 30, 255, cv2.THRESH_BINARY)[1]

# get hough line segments
threshold = 30
minLineLength =10
maxLineGap = 10
lines = cv2.HoughLinesP(thresh, 1, np.pi/360, threshold, minLineLength, maxLineGap)

# draw lines
results = img.copy()
for [line] in lines:
    print(line)
    x1 = line[0]
    y1 = line[1]
    x2 = line[2]
    y2 = line[3]
    cv2.line(results, (x1,y1), (x2,y2), (0,0,255), 1) 

# show lines
cv2.imshow("lines", results)
cv2.waitKey(0)

# write results
cv2.imwrite("lines_hough.png",results)


Результирующие линии Хафа в красном :

enter image description here

Вы получаете множество параллельных очень близких линий, которые, возможно, вы захотите объединить каким-либо образом или сузить список.

...