2014-09-11 126 views
2

嗨我想检测图像中的颈部点。我使用asm来检测脸部的特征点,但我不知道如何检测neck.Is有任何算法或测量来检测它?颈部检测使用opencv

//code ASM asmDetector.GetASMDetectedPoint(7, chin); 
asmDetector.GetASMDetectedPoint(4, leftCheek); 
asmDetector.GetASMDetectedPoint(10, rightCheek); 

//Neck detection 
float rightNeckX = rightCheek.x; 
float rightNeckY = chin.y + ((chin.y - rightCheek.y)/2); 

float leftNeckX = leftCheek.x; 
float leftNeckY = chin.y + ((chin.y - leftCheek.y)/2); 

leftNeck = CPoint2D(leftNeckX, leftNeckY); 
rightNeck = CPoint2D(rightNeckX, rightNeckY); 
+0

解释你到现在为止所尝试的代码... – Gopal00005 2014-09-11 06:16:07

+0

问题中的更新代码请检查 – 2014-09-11 06:24:55

+0

寻找与下巴正下方颜色相同的颜色。 – Bull 2014-09-11 06:32:19

回答

0

在这种情况下,我们可以使用OpenCV的检测面,然后设置点到面的下部,然后我们可以表现为在检测到脖子......

很抱歉,但它是事实,没有任何其他准确的方法可以完美地检测颈部。

如果有人有更好的主意,那么他们的人是最受欢迎的。

0

您可以使用Haar分类器将人脸检测与皮肤检测器相结合。 您只需要从包含检测到的皮肤表面的整体提取的蒙版中减去面部。

2

经过大量的搜索,我确实找到了更好的方法来找到颈部点。请注意,它不是100%正确的,并且在配置文件图像中会出错。

我的方法是使用Dlib。尽管OpenCV广泛用于图像处理,但dlib对图像处理有很好的支持,但我更喜欢dlib的是它的简单性。

步骤:

  1. 获取Upperbody哈尔级联。
  2. 收集上身约100个图像。
  3. 开始使用dlib中提供的工具进行培训。
  4. 基本上你需要按照欧米茄形状标记点,从左到右肩开始。

训练结束后,您将获得可用于颈部检测的编码数据文件。您将在dlib解决方案中找到的所有解决方案和C++实现。

我使用ASM进行了相同的培训,但dlib的结果更有希望。

如果您需要澄清,请告诉我。