Обнаружение линий на изображении с использованием OpenCV с Python
[Обновлен вопрос в конце] Я пытаюсь определить шаблон дизайна простых геометрических фигур в изображении 640x480. Я разделил изображение на блоки 32х32 и проверил, в каком блоке находится центр каждой фигуры.
На основе этого расчета я создал пустую матрицу (160x120) нулей (float32) с
col=640/4
row=480/4
Каждый раз, когда фигура найдена, вычисляется центр и проверяется, в каком блоке она найдена. Соответствующий элемент вместе с его 8 соседями в массиве numpy 160x120 установлены в 1. В конце концов, массив nupy 160x120 представлен в виде изображения в градациях серого с черным фоном и белыми пикселями, представляющими блоки обнаруженных форм.
Изображение в верхнем левом углу представляет собой массив с размерами 160x120. Нет проблем до сих пор.
Как вы видите, недавно сгенерированное изображение имеет белую линию на черном фоне. Я хочу найти rho,theta,x0,y0,x1,y1 для этой строки. Поэтому я решил использовать преобразование HoughLines для этого.
Для следующим образом:
edges = cv2.Canny(np.uint8(g_quadrants), 50, 150, apertureSize=3)
lines = cv2.HoughLines(edges, 1, np.pi / 180, 200)
print lines
Вот g_quadrants
матрица 160x120, представляющая изображение в оттенках серого, но вывод cv2.HoughLines
не содержит ничего, кроме None
,
Пожалуйста, помогите мне с этим.
Обновить:
Небольшое окно с черно-белым изображением (np.float32, относящимся к GrayScale), отображающим белое, - это то, что я получаю, когда
- Разделите 640x480 на 32x32 блоков
- Найдите треугольники на изображении
- Создайте матрицу 32x32, чтобы отобразить результаты для каждого блока
- Обновите соответствующий матричный элемент на 1, если в блоке найден треугольник
Увеличенный вид:
Вы можете видеть, что есть белые пиксели, формирующие прямую линию. Может быть некоторые нежелательные обнаружены. Мне нужно устранить ненужные одиночные пиксели и восстановить непрерывную прямую линию. Это может быть достигнуто путем расширения, а затем размывания изображения. Мне нужна находка x0, y0, x1, y1, rho, theta этой линии.
Их может быть несколько строк. В этом случае мне нужно найти две верхние строки по длине.
1 ответ
Вы хотите найти бар с треугольниками, верно?
threshold
findContours
boundingRect
и отфильтрованы по некоторым правилам