在前一篇文章中,我们完成了对手指肌肤颜色的检测。检测到肌肤颜色之后,接下来就是要确定手掌的范围。
在这个过程中,将要使用到的核心函数是Opencv中的convexityDefects。
如上图所示,黑色的轮廓线为convexity hull, 而convexity hull与手掌之间的部分为convexity defects. 每个convexity defect区域有四个特征量:起始点(startPoint),结束点(endPoint),距离convexity hull最远点(farPoint),最远点到convexity hull的距离(depth)。
void convexityDefects(InputArray contour, InputArray convexhull, OutputArrayconvexityDefects)
参数:
coutour: 输入参数,检测到的轮廓,可以调用findContours函数得到;
convexhull: 输入参数,检测到的凸包,可以调用convexHull函数得到。注意,convexHull函数可以得到vector<vector<Point>>和vector<vector<int>>两种类型结果,这里的convexhull应该为vector<vector<int>>类型,否则通不过ASSERT检查;
convexityDefects:输出参数,检测到的最终结果,应为vector<vector<