0

在我的程序中,我正在检测人脸,我的代码运行良好,但我担心这段代码,因为眼睛检测“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));
}
4

1 回答 1

0

您可能应该阅读一些有关集成 Open CV 功能的手册(Open CV 级联分类器)。最后两个参数是“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 像素的物体,这也加快了我的实时处理速度并防止检测器进行错误检测。您还应该记住,集成检测器源自一些预定义的参数(尤其是在训练阶段)。如果您真的有兴趣为您的应用程序制作更好的检测器(以及更好的检测精度和/或性能),您应该考虑定制分类器。但请注意:虽然修改后的参数(训练迭代次数、训练模式、对象属性、对象对齐等)可以使事情变得更好,但要很好地理解它们中的每一个(以及它们之间以及对最终结果的影响),

于 2013-01-22T11:07:41.570 回答