Преобразование Хафа обнаруживает более короткие строки

Я использую преобразование opencv, чтобы попытаться обнаружить формы. Все более длинные линии очень хорошо обнаруживаются с помощью метода HoughLines, но более короткие полностью игнорируются. Есть ли способ также обнаружить более короткие строки?

код, который я использую, описан на этой странице http://opencv-python-tutroals.readthedocs.org/en/latest/py_tutorials/py_imgproc/py_houghlines/py_houghlines.html

Меня больше интересуют такие линии, как угол дома и т. д. Какой параметр мне следует изменить, чтобы сделать это с помощью преобразования Хафа? или есть другой алгоритм, на который я должен смотреть

Преобразование Hough с помощью учебника по Python OpenCV


person Pita    schedule 30.05.2015    source источник
comment
Вы пробовали HoughLinesP() с параметром minLineLength?   -  person a-Jays    schedule 30.05.2015


Ответы (1)


По предоставленной вами ссылке посмотрите HoughLinesP.

import cv2
import numpy as np

img = cv2.imread('beach.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
edges = cv2.Canny(gray, 50, 150, apertureSize=3)
minLineLength = 100
maxLineGap = 5
lines = cv2.HoughLinesP(edges, 1, np.pi/180, 50, minLineLength, maxLineGap)
for x1, y1, x2, y2 in lines[0]:
    cv2.line(img, (x1, y1), (x2, y2), (0, 255, 0), 2)
cv2.imwrite('canny5.jpg', edges)
cv2.imwrite('houghlines5.jpg', img)

Также посмотрите на изображение края, сгенерированное Canny. Вы должны иметь возможность находить линии только там, где они существуют на краевом изображении.

введите здесь описание изображения

и вот результат обнаружения линии, наложенный на ваше изображение: введите здесь описание изображения

Поэкспериментируйте с переменными minLineLength и maxLineGap, чтобы получить более желаемый результат. Этот метод также не дает вам длинных линий, которые делает HoughLines, но, глядя на изображение Canny, возможно, эти длинные линии нежелательны в первую очередь.

person Scott    schedule 30.05.2015
comment
Спасибо за подсказку, можете ли вы указать, какие значения вы использовали в качестве этих двух параметров в своем изображении? - person Pita; 30.05.2015
comment
@Pita значения, которые вы видите в коде, который я разместил, — это те, которые сгенерировали изображение выше. напомню, это только зеленые линии, так как исходного изображения у меня не было. - person Scott; 30.05.2015
comment
Обратите внимание, что ваши параметры не такие, как вы думаете. Попробуйте передать minLineLength и maxLineGap в качестве именованных параметров, чтобы убедиться в этом. Вы можете видеть в документации, что параметр после threshold — это строки, поэтому minLineLength работает как строки (ничего не делая), а maxLineGap работает как minLineLength (и действительно, увеличение maxLineGap возвращает те же строки, отфильтровывая более мелкие). - person Pablo; 16.09.2020