2013-01-22 54 views
0

在我的程序中,我正在检测一个人的脸部,我的代码运行良好,但我担心这个代码,至于眼睛检测“cascade.detectMultiScale()”有很多参数,而人脸检测,我使用这几个参数,以及它是如何检测到面部,我们是否已经没有初始化的检测物体的大小“cascade.detectMultiScale()”Open CV中的人脸检测代码

cascade.detectMultiScale(gray, faces, 1.2, 2); 

for (int i = 0; i < faces.size(); i++) 
{ 
    Rect r = faces[i]; 
    rectangle(src, Point(r.x, r.y), Point(r.x + r.width, r.y + r.height), CV_RGB(0,0,255)); 
} 
+1

是的,有什么问题? –

+0

@DídacPérez我想知道上面的代码是如何工作的,它返回的图像中的脸,请如果你不介意详细说明代码,它的执行流程,以及它实际上在内部执行的操作 –

回答

0

你或许应该阅读有关一些手工集成Open CV功能(Open CV cascade classifier)。最后2个参数是“minSize”和“maxSize”,可以设置检测对象的最小和最大尺寸。对于我的项目,我检测叙述者的一些1080P HDTV频道的脸,所以我的配置是这样的:

face_cascade.detectMultiScale(frame_gray, faces, 1.1, 2, 0|CV_HAAR_SCALE_IMAGE, Size(500, 500)); 

...这意味着我有比例系数= 1.1,只有1检测到可能的脸。 “CV_HAAR_SCALE_IMAGE”表示该算法负责缩小图像,而不是检测器(通常较慢)。如果你想提取所有候选人中最大的对象,你也可以使用类似“0 | CV_HAAR_FIND_BIGGEST_OBJECT”的东西。在我的情况下,我还强制检测器搜索不小于500x500像素的对象,这也加快了我的实时处理并防止检测器进行错误检测。 您还应该记住,集成检测器是从某些预定义参数(特别是在训练阶段)派生而来的。如果您真的有兴趣为您的应用使用更好的检测器(以及更好的检测精度和/或性能),您应该考虑定制分类器。但请注意:虽然修改后的参数(训练迭代次数,训练模式,对象属性,对象对齐等)可以让事情变得更好,但是要理解每一个(以及它们之间和最终结果之间的影响),以及为了做出一些合理的改进而需要进行微调。