privetvision 4 Жалоба Опубликовано May 18, 2015 Как можно найти центр именно ладони, вместо текущего центра всего контура? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано May 18, 2015 Найти наибольшую окружность, вписываемую в найденный контур, ее центр будет примерно в центре ладони. См. Distance transform. Что то вроде этого: 1 Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
privetvision 4 Жалоба Опубликовано May 18, 2015 Найти наибольшую окружность, вписываемую в найденный контур, ее центр будет примерно в центре ладони. См. Distance transform. Что то вроде этого: Вот у меня имеется бинаризованное изображение руки mFgImageLab[0], применяю в потоке кадров cv::Mat dist; cv::distanceTransform(mFgImageLab[0], dist, CV_DIST_L2, 3); imshow("lab1", dist); И в итоге, ничего не поменялось. Я так понимаю distanceTransform должен вернуть уровень яркости до ближайшего черного пиксела, но у меня чет ничего не меняется. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано May 18, 2015 Дык нормировать надо в интервал [0:1]. cv::normalize(dist, dist, 0, 1., cv::NORM_MINMAX); Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
privetvision 4 Жалоба Опубликовано May 18, 2015 Дык нормировать надо в интервал [0:1]. cv::normalize(dist, dist, 0, 1., cv::NORM_MINMAX); О, здорово! Как теперь можно получить точку с максимальной яркостью? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано May 18, 2015 cv::minMaxLoc 1 Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
privetvision 4 Жалоба Опубликовано May 18, 2015 cv::minMaxLoc Возникает проблемка, с тем, что локоть яркче оказывается, чем ладонь... Вот там черная точка радиусом 20 px. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано May 18, 2015 Как простейший вариант, можно ввести весовые коэффициенты по высоте (просто домножить изображение на вертикальный градиент). Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
privetvision 4 Жалоба Опубликовано May 19, 2015 Как простейший вариант, можно ввести весовые коэффициенты по высоте (просто домножить изображение на вертикальный градиент). Все-таки я бы хотел вернуться к "Найти наибольшую окружность, вписываемую в найденный контур", каким способом это можно сделать с помощью opencv? upd. Вроде что-то нашел pointPolygonTest, но оно во-первых тормозит, т.к. в цикле обходит все изображение. пробовал только roi контура, но также тормоза. Так как все-таки найти окружность ладони? (При условии поворота руки) Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано May 19, 2015 Так Distance transform именно это и делает. Залить контур (или нарисовать на черном фоне только то что надо), и применить Distance transform. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах