В настоящее время я пытаюсь использовать OpenCV 2.3 и c ++ для обнаружения руки (в зеленой перчатке) и различения различных жестов рук.
В этот самый момент мой следующий шаг заключается в приобретении специфических функцийруки (выпуклые дефекты).
До сих пор я использовал эти функции в своем процессе:
mixChannels(); //to subtract non-green channels from green.
threshold(); //to convert to binary
erode(); dialate(); //to get rid of any excess noise
findContours(); //to find contours of course
они работали великолепно, и я смог вывести findContours()
с помощью drawContours()
.
Следующий шаг, и я здесь, использую convexHull()
, который также работает в OpenCV 2.3.Однако мне еще предстоит выяснить, как на самом деле выглядят векторные результаты convexHull()
(какие функции они содержат).
Но тут начинается сложная часть.
Я обнаружил, что более старая версия OpenCV (использующая c, которая использует IplImage
), имеет небольшую аккуратную функцию под названием cvConvexityDefects()
, которая можетдать множество недостатков на выпуклой оболочке.Это то, что мне нужно, но, похоже, такой функции нет для OpenCV 2.3, и я не понимаю, как использовать старый синтаксис для получения этих результатов.
Вот ссылка на OpenРезюме документации на cvConvextDefects
.
То, о чем я прошу, - это либо аналогичная функция OpenCV 2.3, либо самописный фрагмент кода или алгоритм поиска этих дефектов.Или метод использования старого синтаксиса 2.1 для векторного результата или что-то в этом роде.
(я знаю, что могу использовать другие функции, прямоугольные ограничивающие рамки и подогнанные круги. Но я уверен, что выпуклые дефектывыдает наиболее различимые функции.)
Решение - я закончил тем, что использовал оболочку c ++ из этого поста Единственная вещь, которая не работает для этой оболочки, кажется, это лук вектора дефектов, которыйдолжно быть легко решаемо.
Следующий шаг - получение полезных данных об этих дефектах.(На первый взгляд. Данные кажутся единичными точками на выпуклой оболочке, или на контуре, или на их счетчике. Сначала я ожидал набор из двух точек, или единственной точки, и длины, которая, по-видимому, не является. Если я ударю "кирпичной стеной" этим, я сделаю еще один пост)