opencv的haar特征进行人脸识别
2015-11-12 19:08
363 查看
最近学习人脸识别,相当于做个记录吧。有关opencv中的haar特征问题,代码来自于opencv中文论坛,做了一定的修改。
#include "cv.h" #include "highgui.h" #include <stdio.h> #include <stdlib.h> #include <string.h> #include <assert.h> #include <math.h> #include <float.h> #include <limits.h> #include <time.h> #include <ctype.h> #ifdef _EiC #define WIN32 #endif static CvMemStorage* storage = 0; static CvHaarClassifierCascade* cascade = 0; void detect_and_draw(IplImage* image); const char* cascade_name = "D:\\Program Files (x86)\\opencv\\data\\haarcascades\\haarcascade_frontalface_alt.xml"; /* "haarcascade_profileface.xml";*/ int main(int argc, char** argv) { cascade_name = "D:\\Program Files (x86)\\opencv\\data\\haarcascades\\haarcascade_frontalface_alt2.xml"; cascade = (CvHaarClassifierCascade*)cvLoad(cascade_name, 0, 0, 0); if (!cascade) { fprintf(stderr, "ERROR: Could not load classifier cascade\n"); return -1; } storage = cvCreateMemStorage(0); cvNamedWindow("result", 1); const char* filename = "G:\\pic.bmp"; IplImage* image = cvLoadImage(filename, 1); if (image) { detect_and_draw(image); cvWaitKey(0); cvReleaseImage(&image); } cvDestroyWindow("result"); system("pause"); return 0; } void detect_and_draw(IplImage* img) { double scale = 1.2; static CvScalar colors[] = { CV_RGB(0, 0, 255), CV_RGB(0, 128, 255), CV_RGB(0, 255, 255), CV_RGB(0, 255, 0), CV_RGB(255, 128, 0), CV_RGB(255, 255, 0), CV_RGB(255, 0, 0), CV_RGB(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); //进行直方图均衡化 //Detect objects if any // cvClearMemStorage(storage); double t = (double)cvGetTickCount(); CvSeq* objects = cvHaarDetectObjects(small_img, cascade, storage, 1.1, 2, 0/*CV_HAAR_DO_CANNY_PRUNING*/, cvSize(30, 30)); 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); } cvShowImage("result", img); cvReleaseImage(&gray); cvReleaseImage(&small_img); }
相关文章推荐
- 查看Full GC方法:1,jconsel:2,linux 命令: jstat -gcutil id 4s 10003,linux 命令(前提有.gc日志):c
- 在一套安装了keystone的环境上,安装openstack swift(centos6.5)
- linux 安装php-fpm报错
- 【调试】Linux下超强内存检测工具Valgrind
- 【调试】Linux下超强内存检测工具Valgrind
- Linux 强大的nohup(进程后台执行)
- 【调试】Core Dump是什么?Linux下如何正确永久开启?
- 【调试】Core Dump是什么?Linux下如何正确永久开启?
- IT技术网站汇总
- Failure to transfer org.apache.maven.plugins:maven-compiler-plugin:jar:2.5.1
- 网站性能测试工具
- ssh密钥认证原理
- Linux C编程与Shell编程在开发实用工具方面的相同点总结
- Apache部署时记得关闭文件夹浏览
- centos重置root密码
- IP协议详解---Linux学习笔记
- Apache2.4.x 配置文件详解
- linux中,如何清除环境中已经分区的磁盘,并格式化数据,不重启系统
- 常用网站收录
- docker sshd image problem, session required pam_loginuid.so, cann't login