人脸识别分为两大步骤

1.人脸检測 这个是首要实现的。你得实现人脸显示的时候把人脸框出来,当然算法非常多,另一些人眼检測鼻子检測什么的

主要用的是这个

const char *faceCascadeFilename = "haarcascade_frontalface_alt.xml";

detect_and_draw(IplImageBuffer,storage,cascade);

这个函数就是检測人脸的并画框效果例如以下

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY2hlbmFpbmkxMTk=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

主要代码例如以下

void Chenaini::detect_and_draw(IplImage* img,CvMemStorage* storage, CvHaarClassifierCascade* cascade)

{

    double scale=1.2;

    static CvScalar colors[] = {

        {{0,0,255}},{{0,128,255}},{{0,255,255}},{{0,255,0}},

        {{255,128,0}},{{255,255,0}},{{255,0,0}},{{255,0,255}}

    };//Just some pretty colors to draw with

IplImage* gray = cvCreateImage(cvSize(img->width,img->height),8,1);

    IplImage* small_img=cvCreateImage(cvSize(cvRound(img->width/scale),cvRound(img->height/scale)),8,1);

    cvCvtColor(img,gray, CV_BGR2GRAY);

    cvResize(gray, small_img, CV_INTER_LINEAR);

cvEqualizeHist(small_img,small_img);     cvClearMemStorage(storage);

    double t = (double)cvGetTickCount();

        CvSize min=cvSize(0,0);

        CvSize max=cvSize(100,100);

    CvSeq *objects = cvHaarDetectObjects(                               small_img,

                                                                        cascade,storage,

                                                                        1.1,

                                                                       3, 0/*CV_HAAR_DO_CANNY_PRUNING*/,

                                                                      min,

                                                                      max

                                         );

t = (double)cvGetTickCount() - t;

    printf( "detection time = %gms\n", t/((double)cvGetTickFrequency()*1000.) );

//Loop through found objects and draw boxes around them

    for(int i=0;i<(objects? objects->total:0);++i)

    {

        CvRect* r=(CvRect*)cvGetSeqElem(objects,i);

        cvRectangle(img, cvPoint(r->x*scale,r->y*scale), cvPoint((r->x+r->width)*scale,(r->y+r->height)*scale), colors[i%8]);

    }

    for( int i = 0; i < (objects?

objects->total : 0); i++ )

    {

        CvRect* r = (CvRect*)cvGetSeqElem( objects, i );

        CvPoint center;

        int radius;

        center.x = cvRound((r->x + r->width*0.5)*scale);

        center.y = cvRound((r->y + r->height*0.5)*scale);

        radius = cvRound((r->width + r->height)*0.25*scale);

        cvCircle( img, center, radius, colors[i%8], 3, 8, 0 );

    }

QImage image(( uchar*)img->imageData, img->width, img->height, QImage::Format_RGB888);

ui->label_shipin->clear();

     ui->label_shipin->setScaledContents(true);

      ui->label_shipin->setPixmap(QPixmap::fromImage(image));

      rs = vd->unget_frame();

      cvReleaseImage(&img);

}

最新文章

  1. 朋友圈常见单页面触屏滑动上下翻屏功能jQuery实现
  2. class org.springframework.core.type.classreading.ClassMetadataReadingVisitor has interface org.springframework.asm.ClassVisitor as super class
  3. BZOJ 1015: [JSOI2008]星球大战starwar 并查集
  4. C#中使用UDP通信
  5. windows环境下搭建ffmpeg开发环境
  6. 1688: [Usaco2005 Open]Disease Manangement 疾病管理( 枚举 )
  7. MyReport报表引擎2.1.0.0新功能
  8. ASP.NET SignalR 2.0入门指南
  9. 关于grub的那些事(二)
  10. hdu4639 hehe 递推
  11. ubuntu14.04 64位安装H3C iNode客户端
  12. Hibernate【缓存】知识要点
  13. LOJ-10092(最大半连通子图)
  14. vue的二维码生成器
  15. 下载工具axel 和 mwget
  16. Linux中Nginx安装与配置详解
  17. git vim 编辑器基本操作
  18. Springboot 编码规范
  19. nginx配置hls
  20. N 秒打开一个新窗口

热门文章

  1. MySQL 获得当前日期时间\时间戳 函数
  2. 图学ES6-6.数值的扩展
  3. caffe之solver.prototxt文件参数设置
  4. 踩过无数坑实现的哈夫曼压缩(JAVA)
  5. 开发一个简单的babel插件
  6. 【Vue实战之路】一、Vue-cli入门及Vue工程目录全解。
  7. jQuery漏掉的东西
  8. VA插件突然不能使用,彈出“the security key for....”
  9. 【BZOJ-3681】Arietta 网络流 + 线段树合并
  10. spring boot 集成 druid