人脸识别分为两大步骤

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);

}

基于QT和OpenCV的人脸检測识别系统(1)的更多相关文章

  1. 基于QT和OpenCV的人脸检測识别系统(2)

    紧接着上一篇博客的讲 第二步是识别部分 人脸识别 把上一阶段检測处理得到的人脸图像与数据库中的已知 人脸进行比对,判定人脸相应的人是谁(此处以白色文本显示). 人脸预处理 如今你已经得到一张人脸,你能 ...

  2. OpenFace库(Tadas Baltrusaitis)中基于Haar Cascade Classifiers进行人脸检測的測试代码

    Tadas Baltrusaitis的OpenFace是一个开源的面部行为分析工具.它的源代码能够从 https://github.com/TadasBaltrusaitis/OpenFace 下载. ...

  3. 基于OpenCv的人脸检测、识别系统学习制作笔记之三

    1.在windows下编写人脸检测.识别系统.目前已完成:可利用摄像头提取图像,并将人脸检测出来,未进行识别. 2.在linux下进行编译在windows环境下已经能运行的代码. 为此进行了linux ...

  4. 基于OpenCv的人脸检测、识别系统学习制作笔记之一

    基于OpenCv从视频文件到摄像头的人脸检测 在OpenCv中读取视频文件和读取摄像头的的视频流然后在放在一个窗口中显示结果其实是类似的一个实现过程. 先创建一个指向CvCapture结构的指针 Cv ...

  5. 基于OpenCv的人脸检测、识别系统学习制作笔记之二

    在网上找到了一个博客,里面有大量内容适合初学者接触和了解人脸检测的博文,正好符合我目前的学习方面,故将链接放上来,后续将分类原博客的博文并加上学习笔记. 传送门: http://blog.sina.c ...

  6. 【从零学习openCV】IOS7下的人脸检測

    前言: 人脸检測与识别一直是计算机视觉领域一大热门研究方向,并且也从安全监控等工业级的应用扩展到了手机移动端的app,总之随着人脸识别技术获得突破,其应用前景和市场价值都是不可估量的,眼下在学习ope ...

  7. OpenCV人脸检測(完整源代码+思路)

    本博文IDE为vs2013 OpenCV2.49 话不多说,先看视频演示(20S演示): 例如以下: https://v.youku.com/v_show/id_XMjYzMzkxMTYyMA==.h ...

  8. C++开发人脸性别识别教程(10)——加入图片的人脸检測程序

    现在我们的MFC框架已经初具规模,能够读取并显示目录下的图片.在这篇博文中我们将向当中加入人脸检測的程序. 一.人脸检測算法 这里我们使用OpenCv封装的Adaboost方法来进行人脸检測,參见:C ...

  9. 利用opencv中的级联分类器进行人脸检測-opencv学习(1)

    OpenCV支持的目标检測的方法是利用样本的Haar特征进行的分类器训练,得到的级联boosted分类器(Cascade Classification).注意,新版本号的C++接口除了Haar特征以外 ...

随机推荐

  1. 转:vue-router 2.0 常用基础知识点之router.push()

    转载地址:http://www.jianshu.com/p/ee7ff3d1d93d router.push(location) 除了使用 <router-link> 创建 a 标签来定义 ...

  2. java 异常与记录日志

    一. 你可能还想利用java.util.logging工具将输出记录到日志中 package exceptions; //: exceptions/LoggingExceptions.java // ...

  3. Hazelcast是什么

    Hazelcast是什么    “分布式”.“集群服务”.“网格式内存数据”.“分布式缓存“.“弹性可伸缩服务”——这些牛逼闪闪的名词拿到哪都是ITer装逼的不二之选.在Javaer的世界,有这样一个 ...

  4. Intellij IDEA调试功能总结

    public class Demo { public static void f1() { System.out.println("one"); System.out.printl ...

  5. php返回上一页

    echo "<script>alert('没有获取到订单信息');history.go(-1);</script>";

  6. [java] DOS编译 .java 文件得到 .class 文件 并执行 以及使用外部 .jar包 时的命令

    当写一个java文件后,在DOS中进行编译与执行时,如果没有引入外来的包,那情况很简单 例如: public class hello_world { public static void main(S ...

  7. 使用React Hooks新特性useReducer、useContext替代传统Redux高阶组件案例

    当我们使用redux进行数据管理的时候,一般都是在根组件通过Provider的方式引入store,然后在每个子组件中,通过connect的方式使用高阶组件进行连接,这样造成的一个问题是,大量的高阶组件 ...

  8. MySQL DROP DB或TABLE场景下借助SQL Thread快速应用binlog恢复方案

    [问题] 假设有这种场景,误操作DROP DB或TABLE,常规的恢复操作是还原全备份,并用mysqlbinlog追加到drop操作前的位置. 如果需要恢复的binlog的日志量比较大而我们只希望恢复 ...

  9. 捕获程序异常之tryCatch

    一.try catch语法try…catch…finally…语法中除了try以外,catch和finally都是可选的(两者必须要有一个),也就是说try…catch…finally…语法有以下三种 ...

  10. kotlin 安装 使用

    插件下载 下载 kotlin 扩展 . 可以 简写 findviewbyid 这些. 比如 id 是 textview 直接 这样赋值 textview.setText("测试文字" ...