OpenCV: OpenCV人脸检测框可信度排序

来源:互联网 发布:什么软件可以升级win10 编辑:程序博客网 时间:2024/06/02 05:09

        参考文章: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 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 学信网号码换了怎么办 学信网注册换手机了怎么办 学信网手机号码已被注册怎么办 学信网手机号码被注册了怎么办 去英国留学不会做饭怎么办 小米陶瓷刀钝了怎么办 橱柜的缝擦不到怎么办 悠悠球上油早了怎么办 买了没有esp的车怎么办 饥荒海难狗来了怎么办 饥荒海难拖网掉水里了怎么办 饥荒遇到了猪人怎么办 饥荒龙蝇赖在家不走怎么办 饥荒海难崩档了怎么办 gta5全是rpf文件怎么办 饥荒没有海象人营地怎么办 饥荒海滩猎犬来了怎么办 宝宝换牙门牙上长颗尖牙怎么办 肉卡在牙缝里怎么办 电脑做系统卡死怎么办 苹果6升级太卡怎么办 电脑玩不了联机饥荒怎么办 饥荒渡渡鸟死了一只怎么办 饥荒电脑联机植物生病怎么办 开车蹭到别人车怎么办 立定跳不会收腹怎么办 1岁宝宝有蛔虫怎么办 手机屏幕总是有网页跳出来怎么办 cs游戏屏幕变成正方形怎么办 大王卡被收回了怎么办 模拟人生4小人生病了怎么办 创造与魔法死后怎么办? 脚不小心扭伤了该怎么办 小鸡脚扭伤了该怎么办 跳高比赛最终成绩相等怎么办 热车1200怠速降不下来怎么办 大腿根骨髓水肿越来越疼怎么办 倒库方向打晚了怎么办 签吻芳颜祛斑液脸脱皮怎么办 3d右边工具栏消失了怎么办 3d菜单栏消失了怎么办