参考文章:http://blog.csdn.net/hua_007/article/details/45368607

使用OpenCV进行人脸识别时,使用

   casecade.detectMultiScale

函数,可输出每个检测框的置信度

代码段:

const int numReserve = 4;
std::vector<  int > rejLevel;
std::vector<double>   levelW;
cascade.detectMultiScale( smallImg, eyes, rejLevel, levelW, 1.1, 3, 0, cv::Size(), cv::Size(), true);
cout << "eyes size=:" << eyes.size() << endl;
            
// 重新排序
std::vector<std::pair<float, int> > eyeConfi;
for (int i = 0; i < (int)(eyes.size()); i++){
     eyeConfi.push_back(std::make_pair(levelW[i], i));
}
std::qsort(&eyeConfi[0], eyeConfi.size(), sizeof(eyeConfi[0]), cmpMapWishchin); //重新获取,只取前四个
for (int i = 0; i < (int)(eyes.size()) && i<numReserve ; i++)
{
       cv::Rect eyeSin = eyes[eyeConfi[i].second];
       eyesFinal.push_back(eyeSin) ;
}

函数原型:

    CV_WRAP virtual void detectMultiScale( const Mat& image,
CV_OUT vector<Rect>& objects,
vector<int>& rejectLevels,
vector<double>& levelWeights,
double scaleFactor=1.1,
int minNeighbors=3, int flags=0,
Size minSize=Size(),
Size maxSize=Size(),
bool outputRejectLevels=false );

cmp函数:

         int cmpMapWishchin(const void *p1, const void *p2)
{
int v = 1;
std::pair<float, int > *pp1, *pp2;
pp1 = (std::pair<float, int > *) p1;
pp2 = (std::pair<float, int > *) p2; //最大值排序
if (pp1->first - pp2->first < 0){
v = 1;
}
else{
v = -1;
} return (v);
}

函数的原理是这样的(个人理解,有错误请指教):

首先一个level一个level地测试样本,然后每一个level给一个对应的得分,也就是levelWeight,如果这个weight低于或者高于对应level的threshold,则被抛弃。

坚持到最后一个level并且在最后一个level仍然满足threshold的框就是正确的脸(正样本)。

所以,人脸的分应该是这样:level越大,分数越高,在相同的level,levelWeight越大分数越高。

但是实际上真正的人脸都是能坚持到level20(最后一个level)的,所以只比对最后一个level的所有大于1的框的levelWeight进行比对就可以知道脸的得分啦~

试验结果:

  

最新文章

  1. 如何快速优化手游性能问题?从UGUI优化说起
  2. 【WPF系列】基础 PasswordBox
  3. Meteor常用技能
  4. hdu 4049 2011北京赛区网络赛J 状压dp ***
  5. 创建一个叫做People的类: 属性:姓名、年龄、性别、身高 行为:说话、计算加法、改名 编写能为所有属性赋值的构造方法; (2)创建主类: 创建一个对象:名叫“张三”,性别“男”,年龄18岁,身高1.80; 让该对象调用成员方法: 说出“你好!” 计算23+45的值 将名字改为“李四”
  6. C语言extern作用(全局变量)
  7. [USACO2002][poj1944]Fiber Communications(枚举)
  8. 兼容IE,chrome 等所有浏览器 回到顶部代码
  9. Optimistic Offline Lock乐观离线锁
  10. PHP发送POST请求的三种方式
  11. Objective-C 计算代码运行时间
  12. duck
  13. 虚幻UE4中移动端水材质的设置
  14. 使用SQL命令批量替换WordPress站点中图片的URL链接地址
  15. ASP.NET Core 2.1中基于角色的授权
  16. Android Studio 快捷键总结(OS X)
  17. 【JVM】java对象
  18. 【jmeter】Jmeter启动GUI界面出错
  19. Linux下oracle启动/关闭监听(bash:lsnrctl:command not found)
  20. MFC基于对话框风格按钮控件添加图片的方法(大神止步)

热门文章

  1. nagios新增监控集群、卸载监控集群批量操作
  2. noip模拟赛 Massacre at B&#233;ziers
  3. Tomcat关闭后,重新启动,session中保存的对象为什么还存在解决方法
  4. nyoj_915_+-字符串_201402261520
  5. 51Nod——T 1242 斐波那契数列的第N项
  6. springMVC入门笔记
  7. 让devstack中的vm訪问外网
  8. 《Android源代码设计模式解析与实战》读书笔记(十八)
  9. 把握linux内核设计思想系列
  10. Bag标签之删除书包中的一条数据