4

我是 JavaCV/OpenCV 的新手,所以如果我是一个完全的白痴,请提前道歉......

我需要检测图像中的“主要/主要”人脸(该图像大部分是“个人资料图片”),不需要人脸识别。

由于不同的haarcascade文件每个都检测到不同的人脸,并且检测到的人脸有时实际上不是人脸,而是图像中的任意伪影,因此我需要决定使用哪些人脸。假设检测到的人脸是真实的人脸,使用最大的人脸是有意义的,因为它是个人资料图片。

我遇到的主要问题是代码检测到(对于某些图像)超过 1 张脸,而最大的脸实际上根本不是人脸。这是我的一个测试中的一个示例,其中代码检测到 2 张脸,1 张是真实的脸,另一个是女人的胸围,碰巧她的胸围比她的脸大。

脸:java.awt.Rectangle[x=62,y=42,width=78,height=78] 面积6084
胸围:java.awt.Rectangle[x=86,y=144,width=80,height=80] 面积6400

所以简而言之,我的问题是,如果我有多个检测到的面孔,是否有某种评分量表可以用来确定哪些面孔最匹配 OpenCV 所看到的面孔?

4

1 回答 1

1

不幸的是,面部检测没有为您提供这样的选择。我猜你的代码看起来像这样:

CvSeq faces = cvHaarDetectObjects(grayImage, cascade, ......);

所以你会得到一个 CvSeq,它实际上只不过是一个指向界定面的矩形序列的指针。你不会得到更多的信息。

通常,我会说半身像在头部下方(更重要的是,头部在身体其他部位的上方),除非在某些特殊情况下;)。

您可以简单地利用 Y 位置来丢弃胸围。

如果其他非身体部位的元素被检测为面部,那么你就完蛋了。

于 2013-11-01T20:58:39.560 回答