В настоящее время я пытаюсь определить стрелку и ее ориентацию с помощью OpenCV.
Я выполнил процесс обнаружения контуров, который работает нормально, но моя проблема в согласовании формы.
Я пытался использовать функцию matchShapes в OpenCV, но мои результаты кажутся действительно плохими.
Я использую простой шаблон изображения и обработанное изображение (обычно фото, но для теста я использовал простое изображение)
Изображение шаблона:
Обработанное изображение:
Используя эти два, matchShapes говорит мне, что квадрат слева больше похож на шаблон, чем стрелка на изображении.
Я не знаю, откуда это взялось.
Является ли matchShapes плохой функцией для этого использования? Кто-то сказал мне использовать алгоритм SIFT, но не слишком ли это излишне для такой простой формы?
Спасибо,
Я бы попытался работать с Момент изображения найти форму. Для этого вам нужно найти различные свойства области изображения. И самое лучшее, что хотелось бы оцифровывать изображение.
Сначала я расскажу вам несколько методов, чтобы описать форму, им не нужно что-то делать с моментом изображения.
Сначала будет окружность / периметр формы. Вычисляя периметр, вам нужно сложить длину всех контурных элементов фигуры. Затем можно вычислить площадь формы, вы можете посчитать пиксели или взять расстояние до шнурка, как в этом посте. По периметру и площади можно рассчитать округлость объекта / формы. Более подробно вы можете создать ограничивающий прямоугольник и выпуклый корпус из него. Не в последнюю очередь, но не в последнюю очередь форма имеет центр тяжести. Это некоторые свойства, с которыми вы можете создавать свои собственные векторы функций, но вы должны быть немного креативными. Или вы можете использовать момент изображения.
Я не уверен, существует ли момент изображения в OpenCV, лучший и надежный момент — момент Ху. Я нашел некоторые объяснения здесь в stackoverflow: Значение функции семи инвариантных моментов Ху из OpenCV. Ху момент надежен против поворота, перемещения и масштабирования. Так идеально подходит для вашей проблемы.
В конце я использовал алгоритм SURF, так как хотел найти более сложные объекты;)