|
GECKO 1.0
Human-computer interface based on hand gesture recognition
|
Finds the convexity defects of the hand convex hull, that are used to find the fingers. {
std::vector< cv::Vec4i > convexity_defects;
//-- Find the complex hull
cv::convexHull( _hand_contour[0], _hand_hull, CV_CLOCKWISE);
//-- Find convexity defects:
std::vector<int> hull_indices;
cv::convexHull( _hand_contour[0], hull_indices, CV_CLOCKWISE);
try
{
cv::convexityDefects( _hand_contour[0], hull_indices, convexity_defects );
}
catch ( std::exception& e)
{
std::cerr << e.what() ;
_hand_found = false;
return;
}
//-- Convert the found defects to a more convenient format:
_hand_convexity_defects.clear();
//std::cout << "[Debug] Found " << convexity_defects.size() << " defects:" << std::endl;
for (int i = 0; i < convexity_defects.size(); i++)
{
ConvexityDefect newDefect;
newDefect.start_index = convexity_defects[i][0];
newDefect.start = _hand_contour[0].at( newDefect.start_index );
newDefect.end_index = convexity_defects[i][1];
newDefect.end = _hand_contour[0].at( newDefect.end_index );
newDefect.depth_point_index = convexity_defects[i][2];
newDefect.depth_point = _hand_contour[0].at( newDefect.depth_point_index );
newDefect.depth = convexity_defects[i][3] / 256.0;
_hand_convexity_defects.push_back( newDefect );
//std::cout << "\t" << i << "-> (" << newDefect.start_index << ", " << newDefect.end_index << ", " << newDefect.depth_point_index << ")" << std::endl;
}
}
|
1.7.4