我必须在我的轮廓中区分手掌和肘部(为此我使用 cvconvexitydefect)。这是图像:
我正在拍摄左图像的轮廓。
右图中的2个最高点是肩膀(通过其他方法检测到)
左下2比右下2暗(区分左右手)
使用代码defect.start 比defect.end 暗(但是对于左手defect.start 是手掌,而对于右手defect.start 是肘部)
我有两个问题:
- 那么cvconvexity 缺陷是如何得到它的defect.start 的呢?
- 无论如何如何区分手掌和肘部?
为了清楚起见,我认为我可以通过认为开始可能是轮廓的最上点或最左边的点来从肘部辨认出手掌,但事实并非如此。
这是代码的相关部分:
cvFindContours( HeadLess1, mem, &contours, sizeof(CvContour), CV_RETR_CCOMP, CV_CHAIN_APPROX_SIMPLE, cvPoint(0,0));
for(ptr=contours;ptr!=0;ptr=ptr->h_next){
tem=cvConvexHull2(ptr,0,1,0);
tem=cvConvexityDefects(ptr,tem,mem);
CvConvexityDefect defect,cd;
defect.depth=0;
for(int l=0;l<tem->total;l++){
cd=*(CvConvexityDefect*)cvGetSeqElem(tem,l);
if(cd.depth>defect.depth)defect=cd;
}
if((*(defect.start)).y>(*(defect.end)).y){
elbow=(*(defect.start));palm=(*(defect.end));
//a bad inference for the case when palm is above elbow
} else {
elbow=(*(defect.end));palm=(*(defect.start));
//a bad inference same case
}
if(elbow.x<320)
{
q=100;
}
else
{
q=200;
}
cvCircle(HeadLess1,*(defect.start),10,cvScalarAll(q),CV_FILLED);
cvCircle(HeadLess1, *(defect.end), 10, cvScalarAll(q+50), CV_FILLED);
}
Headless1 一个是我的形象。提前致谢。