Перейти к содержимому
Compvision.ru
privetvision

Найти центр ладони

Recommended Posts

Как можно найти центр именно ладони, вместо текущего центра всего контура?

post-7361-0-45001900-1431962714_thumb.pn

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Найти наибольшую окружность, вписываемую в найденный контур, ее центр будет примерно в центре ладони.

 

См. Distance transform.

 

Что то вроде этого:

OE_52_2_027206_f008.png

  • Like 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Найти наибольшую окружность, вписываемую в найденный контур, ее центр будет примерно в центре ладони.

 

См. Distance transform.

 

Что то вроде этого:

OE_52_2_027206_f008.png

Вот у меня имеется бинаризованное изображение руки mFgImageLab[0], применяю в потоке кадров 

cv::Mat dist;  
cv::distanceTransform(mFgImageLab[0], dist, CV_DIST_L2, 3);
imshow("lab1", dist);

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

post-7361-0-96794800-1431974050_thumb.pn

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Дык нормировать надо в интервал [0:1].

cv::normalize(dist, dist, 0, 1., cv::NORM_MINMAX);

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

 

Дык нормировать надо в интервал [0:1].

cv::normalize(dist, dist, 0, 1., cv::NORM_MINMAX);

О, здорово! Как теперь можно получить точку с максимальной яркостью?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
cv::minMaxLoc
  • Like 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
cv::minMaxLoc

Возникает проблемка, с тем, что локоть яркче оказывается, чем ладонь... Вот там черная точка радиусом 20 px.

 

post-7361-0-84862100-1431980988_thumb.pn

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Как простейший вариант, можно ввести весовые коэффициенты по высоте (просто домножить изображение на вертикальный градиент).

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Как простейший вариант, можно ввести весовые коэффициенты по высоте (просто домножить изображение на вертикальный градиент).

Все-таки я бы хотел вернуться к "Найти наибольшую окружность, вписываемую в найденный контур", каким способом это можно сделать с помощью opencv?

upd. Вроде что-то нашел pointPolygonTest, но оно во-первых тормозит, т.к. в цикле обходит все изображение. пробовал только roi контура, но также тормоза. 

Так как все-таки найти окружность ладони? (При условии поворота руки)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Так Distance transform именно это и делает.

Залить контур (или нарисовать на черном фоне только то что надо), и применить Distance transform.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте учётную запись или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать учётную запись

Зарегистрируйтесь для создания учётной записи. Это просто!

Зарегистрировать учётную запись

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу

×