Сортировать матрицу, возвращаемую cv2.HoughLines - PullRequest
0 голосов
/ 27 апреля 2018

При выполнении обнаружения строк с помощью преобразования Хафа в Python я получаю матрицу со значениями rho и theta для каждой строки. Из этих строк я беру только горизонтальные.

С помощью следующего метода я могу извлечь несколько точек из этой линии.

for line in lines:
    for rho, theta in line:
        a = np.cos(theta)
        b = np.sin(theta)
        x0 = a*rho
        y0 = b*rho
        x1 = int(x0 + 1000*(-b))
        y1 = int(y0 + 1000*(a))
        x2 = int(x0 - 1000*(-b))
        y2 = int(y0 - 1000*(a))

Я прочитал, что HoughLines сортирует массив в порядке возрастания по значению аккумулятора, но я хотел бы отсортировать этот массив и поместить верхнюю линию изображения в первую позицию массива, чтобы можно было нарисовать только это линия.

PD: я наконец нашел решение

lines_sort = sorted(lines, key=lambda a_entry: a_entry[..., 1])

1 Ответ

0 голосов
/ 30 апреля 2018

Я беру только горизонтальные

верхняя линия изображения [...] для рисования только этой линии.

Итак, вы хотите найти горизонтальную линию с наименьшим значением rho. Вы уже знаете, как найти горизонтальные линии, теперь итерируйте их и найдите ту, которая имеет наименьшее значение rho.

Сортировка - это дорогой способ найти наименьшее или наибольшее значение. Я не очень знаком с библиотеками Python, но уверен, что в нем есть функция max, которая возвращает индекс для самого большого элемента? Ах, 1012 * это делает! Вы ищете numpy.argmax.

...