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

人脸识别分为两大步骤

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" >

主要代码例如以下

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

}

时间: 2025-01-11 07:13:02

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

基于QT和OpenCV的人脸识别系统

1 系统方案设计 1.1 引言 人脸是一个常见而复杂的视觉模式,人脸所反映的视觉信息在人与人的交流和交往中有着重 要的作用和意义,对人脸进行处理和分析在视频监控.出入口控制.视频会议以及人机交互等领 域都有着广泛的应用前景,因此是模式识别和计算机视觉领域持续的研究热点. 本系统在 FriendlyARM Tiny6410 开发板基础上,利用 OpenCV 计算机视觉库和 QT 图形库,通 过普通的 USB 摄像头实现了自动人脸识别,准确率较高,方便易用. 1.2 系统总体架构 "人脸识别&quo

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

1.在windows下编写人脸检测.识别系统.目前已完成:可利用摄像头提取图像,并将人脸检测出来,未进行识别. 2.在linux下进行编译在windows环境下已经能运行的代码. 为此进行了linux系统下OpenCv的安装. 在linux中安装OpenCv遇到了很多问题,已经解决,但是花费了不少时间.目前:可以在linux下编译OpenCv项目,但是运行生成的程序时出现问题.初步认定为采用了虚拟机而导致运行内存不足,程序直接崩溃,将继续解决这个问题. 花费较多时间安装OpenCv是有必要的,为

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

人脸识别分为两大步骤 1.人脸检测 这个是首要实现的,你得实现人脸显示的时候把人脸框出来,当然算法很多,还有一些人眼检测鼻子检测什么的 主要用的是这个 const char *faceCascadeFilename = "haarcascade_frontalface_alt.xml"; detect_and_draw(IplImageBuffer,storage,cascade); 这个函数就是检测人脸的并画框效果如下 主要代码如下 void Chenaini::detect_and

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

基于OpenCv从视频到摄像头的人脸检测 在OpenCv中读取视频文件和读取摄像头的的视频流然后在放在一个窗口中显示结果其实是类似的一个实现过程. 先创建一个指向CvCapture结构的指针 CvCapture *capture; 再用两个函数就可以分别获取到视频文件或者摄像头的一些状态信息,然后把这些信息放进去之前指向的结构体 视频文件 capture = cvCreateCameraCapture(0); 打开摄像头 capture = cvCreateFileCapture(argv[1]

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

本博文IDE为vs2013 OpenCV2.49 话不多说,先看视频演示(20S演示): 例如以下: https://v.youku.com/v_show/id_XMjYzMzkxMTYyMA==.html?spm=a2h0w.8278793.2736843.4#paction 程序截图例如以下: 怎样来用OpenCV来实现能. 以下给出OpenCV实现人脸检測的一般步骤: 1.载入人脸检測器 2.开启摄像头 3.对图片进行灰度处理(事实上能够不处理,上图中原图的标题栏就是未进行灰度处理进行的检

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

OpenCV支持的目标检測的方法是利用样本的Haar特征进行的分类器训练,得到的级联boosted分类器(Cascade Classification).注意,新版本号的C++接口除了Haar特征以外也能够使用LBP特征. 先介绍一下相关的结构,级联分类器的计算特征值的基础类FeatureEvaluator,功能包含读操作read.复制clone.获得特征类型getFeatureType,分配图片分配窗体的操作setImage.setWindow,计算有序特征calcOrd,计算绝对特征calc

人脸检測中几种框框大小的选择~

人脸检測应用极为广泛,内部细节也偏多,尤其是涉及到几种类型的框,这几种框的大小之前有着千丝万缕的联系,对检測性能的好坏影响程度大小不一.本篇文章基于自己在人脸检測方面的经验,说说对这些框之间关系的一些理解. 如今大部分人脸检測效果都已adaboost+LBP(各种改进)的方式实现,adaboost由N个强分类器组成,每一个强分类器由M个弱分类器组成,而每一个弱分类器事实上就是一个特征. 本文以LBP特征为例,人脸检測共涉及到例如以下几类框: 1. LBP特征矩形框大小(极为重要) 2. 检測框大

人脸检測流程及正负样本下载

人脸检測做训练当然能够用OpenCV训练好的xml.可是岂止于此.我们也要动手做! ~ 首先是样本的选取. 样本的选取非常重要.找了非常久才发现几个靠谱的. 人脸样本:http://www.vision.caltech.edu/Image_Datasets/Caltech_10K_WebFaces/   网上抓取的逾10,000个人脸样本 http://vis-www.cs.umass.edu/lfw/  13.000个人脸 负样本(背景环境衣服动物乱七八糟的):http://groups.cs

windows平台下基于QT和OpenCV搭建图像处理平台

在之前的博客中,已经分别比较详细地阐述了"windows平台下基于VS和OpenCV"以及"Linux平台下基于QT和OpenCV"搭建图像处理框架,并且生成了相应的免费视频.这篇博客的主要内容,就是基于最新版本的相应工具,在windows平台下,"基于QT和OpenCV搭建图像处理平台",并且进一步研究如何基于QT所见即所得的便利,进行图像处理操作,最终还要和vs做一个比较,进行初步小结. 主要分为3个部分,一个是当前模式下,windows+Q