2014-06-04 2 views
0

В настоящее время я пытаюсь обнаружить стрелку и ее ориентацию с помощью OpenCV. Я сделал процесс обнаружения контура, который работает нормально, но моя проблема связана с стороной, соответствующей форме.Определение формы стрелки с помощью OpenCV

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

изображения шаблона:

Template Image

Обработанные изображения:

enter image description here

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

Является ли matchShapes плохой функцией для этого использования? Кто-то сказал мне использовать SIFT-алгоритм, но разве это не слишком много для такой простой формы?

Спасибо,

+4

Вы можете передать ответ здесь http://stackoverflow.com/questions/22876351/opencv-2-4-8 -python-definition-orientation-of-a-arrow/22876975 # 22876975 – Haris

+0

Спасибо :) Все еще есть плохой случай, когда проверка угла не так хороша ^^ –

+0

Какие плохие случаи ?, также попробуйте сделать значение epsilon в approxPolyDP () выше, пока вы не получите общее количество очков 7, так как ваша стрелка имеет 7 углов. – Haris

ответ

0

В конце концов, я использовал алгоритм SURF, как я хотел, чтобы найти более сложные объекты;)

+2

Если вы решили свою проблему, отметьте свой ответ как принятый или удалите вопрос, если вы считаете, что это не полезно кому-либо еще. – js1568

1

Я хотел бы попробовать работать с Image moment найти форму. Для этого вам нужно найти различные свойства области изображения. И самое лучшее - это бинаризировать изображение. Сначала я расскажу вам несколько методов, чтобы описать форму, которой они не должны что-то делать с моментом изображения.

Прежде всего, будет окружность/периметр формы. Вычисляя периметр, вам нужно суммировать длину всех контурных элементов формы. Затем можно вычислить площадь фигуры, вы можете подсчитать пиксели или взять расстояние между шнурами, как in this post. С периметром и площадью можно рассчитать circularity объекта/формы. Более подробно вы можете создать ограничительную рамку и выпуклую оболочку. Последнее, но не менее важное, имеет центр тяжести. Это некоторые свойства, с помощью которых вы можете создавать собственные векторы объектов, но вы должны быть немного креативными. Или вы можете использовать момент изображения.

Я не уверен, что в OpenCV существует момент изображения, лучшим и надежным моментом является момент hu. Я нашел некоторое объяснение здесь в stackoverflow: Meaning of the seven Hu invariant moments function from OpenCV. Hu моментально устойчив к вращению, трансляции и масштабированию. Так идеально подходит для вашей проблемы.

+0

Спасибо! Hu Moments существует в OpenCV, но моя проблема была больше связана с тем, как определить, что форма на самом деле является стрелкой с этими точками :) http://stackoverflow.com/questions/22876351/opencv-2-4-8-python -determining-orientation-of-a-arrow/22876975 # 22876975 Это сообщение помогает мне, но это не идеальное обнаружение, хотя –

Смежные вопросы