Open CV中的人脸检测代码

时间:2013-01-22 10:14:11

标签: c opencv

在我的程序中我正在检测一个人的脸,我的代码运行良好,但我担心这个代码,因为眼睛检测“cascade.detectMultiScale()”有很多参数,而对于面部检测,我是使用这些参数,以及它如何检测面部,我们是否在“cascade.detectMultiScale()”中初始化了检测对象的大小

 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 :(得分:0)

您应该阅读一些有关集成Open CV函数的手册(Open CV cascade classifier)。最后2个参数是“minSize”和“maxSize”,它们可以设置检测到的对象的最小和最大大小。对于我的项目,我在一些1080p高清电视频道上检测叙述者的脸,所以我的配置是这样的:

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

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