2016-04-03 11 views
0

Я просто изучаю OpenCV и задаюсь вопросом о обнаружении линии. У меня есть ситуация, когда мне нужно определить горизонтальную черную линию на белом фоне. Я уверен, что линия всегда будет отображаться горизонтально (в пределах нескольких градусов) и должна определить, где она находится на изображениях с камеры.Что является самым основным методом обнаружения линии в OpenCV

Моя мысль, поскольку она всегда горизонтальная, я могу просто искать вертикально для «края» через несколько столбцов на изображении и называть это хорошо. Возможно, даже уменьшить количество пикселей, которые я снимаю с камеры, в качестве дополнительного увеличения скорости.

Есть ли встроенная функция для этого типа определения линии?

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

Изображение (с моими бегами раствора) выглядит следующим образом:

Left is thresholded image, right is solution running. Green bars are horizontal edges, red mark the tape strips I'm interested in tracking.

+0

Если я понимаю, вы правы я реализовал нечто подобное в http://stackoverflow.com/questions/21675509/finding-the -fitline-of-contours-in-opencv/21677214 # 21677214 – Micka

+0

Не могли бы вы показать несколько изображений? – Miki

ответ

0

Метод, с которым я столкнулся, представляет собой цикл for. После порога изображения я просматриваю два столбца, чтобы найти все «ребра» или изменения в значении. Затем я обрабатываю этот список, чтобы найти только горизонтальные пары ребер.

Затем я нахожу все линии, которые достаточно близки друг к другу и имеют желаемый уровень заполнения (логическое сравнение с пороговым изображением), которое эффективно находит только ленты ленты, которые меня интересуют.

Это займет примерно 1/50-е время, когда ПРОСТО ТОЛЬКО вызов Canny, не включая findContours и т. Д., Которые также необходимы. Однако я не тестировал Hough, но я считаю, что это все равно будет значительно быстрее.

Поскольку самой большой проблемой была скорость обработки, я сделал несколько других оптимизаций.

код можно найти здесь (Это очень хорошо прокомментирован, я обещаю): Code as a gist

+0

Возможно, вам стоит ознакомиться с преобразованием Хафа. Тогда вам не нужно думать даже об этом :) – Piglet

+0

Пятачок, я знаком с ним сейчас, но опять же, поскольку скорость обработки - проблема, мне нужно более простое решение. Я не хочу делать «Обнаружение кромок» -> «Преобразование суставов» -> «де-хау», когда я могу в основном взломать специальный детектор границ, который говорит мне, где горизонтальные линии. Опять же, я уверен, что Хью работает, но для этого приложения он подавлен и слишком медленный. – DweebsUnited

+0

вот почему я сказал вам, что вам не нужно это учитывать ... – Piglet

0

Если вы предоставите тип изображения вы говорите, то предлагая решение будет лучше.

Также интересно, почему вы не можете использовать Canny Detector, который не так дорого вычисляется. Кроме того, вы можете уменьшить изображение, вычислить края и фильтровать горизонтальные края.

С другой стороны, зная, что ваши горизонтальные края всегда горизонтальны на плоскости изображения, вы можете использовать сопоставление шаблонов.