【OpenCV学习笔记 014】人脸人眼识别
2016-10-02 11:36
603 查看
源码示例
运行结果
#include "cv.h" #include "highgui.h" #include <assert.h> #include <iostream> using namespace std; int main(){ double scale = 1.3; IplImage* img = cvLoadImage("gilrPicture.png"); cvNamedWindow("结果图", CV_WINDOW_AUTOSIZE); IplImage* grayImg = cvCreateImage(cvGetSize(img), img->depth, 1); IplImage* smallImg = cvCreateImage(cvSize(cvRound(img->width / scale), cvRound(img->height / scale)), IPL_DEPTH_8U, 1); cvCvtColor(img, grayImg, CV_BGR2GRAY); cvResize(grayImg, smallImg, CV_INTER_LINEAR); cvEqualizeHist(smallImg, smallImg); //使灰度图像直方图均衡化。归一化图像亮度和增强对比度 string eyeStr("eye"); CvMemStorage* storagel = 0; storagel = cvCreateMemStorage(0); //创建内部存储器 CvHaarClassifierCascade *cascade_f = NULL; const char* cascade_name1 = "D:\\opencv\\sources\\data\\haarcascades\\haarcascade_frontalface_alt2.xml"; cascade_f = (CvHaarClassifierCascade*)cvLoad(cascade_name1, 0, 0, 0); assert(cascade_f != NULL); CvSeq *faces = cvHaarDetectObjects(grayImg, cascade_f, storagel, 1.1, 3, 8, cvSize(20, 20)); for (int i = 0; i < (faces ? faces->total : 0); i++) { CvRect *face = (CvRect*)cvGetSeqElem(faces, i); cvRectangle(grayImg, cvPoint(face->x, face->y), cvPoint(face->x + face->width, face->y + face->height) , CV_RGB(255, 0, 0), 1, 4, 0); cvSetImageROI(grayImg, cvRect(face->x, face->y + (face->height / 5.5), face->width, face->height / 3.0)); CvMemStorage* storage = 0; storage = cvCreateMemStorage(0); CvHaarClassifierCascade* cascade_e = 0; const char* cascade_name2 = "D:\\opencv\\sources\\data\\haarcascades\\haarcascade_eye.xml"; cascade_e = (CvHaarClassifierCascade*)cvLoad(cascade_name2, 0, 0, 0); assert(cascade_e != NULL); //storage = cvCreateMemStorage(0) ; CvSeq *eyes = cvHaarDetectObjects(grayImg, cascade_e, storage, 1.1, 3, 3, cvSize(1, 1)); int j; cout << eyes->total << endl; IplImage* temp = cvCreateImage(cvGetSize(grayImg), grayImg->depth, 1); cvCopyImage(grayImg, temp); CvSize dst_cvsize; dst_cvsize.width = 150; dst_cvsize.height = 150; for (j = 0; j < (eyes ? eyes->total : 0); j++) { char char2[100]; _itoa(j, char2, 10);//把数字转换成字符型 eyeStr.append(char2); eyeStr.append(".jpg"); CvRect *eye = (CvRect*)cvGetSeqElem(eyes, j); cvSetImageROI(temp, cvRect(eye->x, eye->y, eye->width, eye->height));//设置感兴趣区 IplImage* dst = cvCreateImage(cvSize(eye->width, eye->height), IPL_DEPTH_8U, 1); IplImage* fixed_dst = cvCreateImage(dst_cvsize, IPL_DEPTH_8U, 1); cvCopy(temp, dst, 0);//temp是输入,dst是输出 cvResetImageROI(temp); cvResize(dst, fixed_dst, CV_INTER_LINEAR);//图像缩放 cvNamedWindow(eyeStr.c_str(), 1); cvShowImage(eyeStr.c_str(), fixed_dst); cvSaveImage(eyeStr.c_str(), fixed_dst); eyeStr.clear(); eyeStr.append("eye"); cvRectangle(grayImg, cvPoint(eye->x, eye->y), cvPoint(eye->x + eye->width, eye->y + eye->height), CV_RGB(255, 0, 0), 1, 4, 0); cvReleaseImage(&dst); cvReleaseImage(&fixed_dst); } cvResetImageROI(grayImg); } cvShowImage("结果图", grayImg); cvWaitKey(0); cvReleaseImage(&grayImg); cvDestroyWindow("结果图"); return 0; }
运行结果
相关文章推荐
- 【OpenCV学习笔记 022】人脸识别 小试牛刀
- OpenCV学习笔记(五十五)——用OpenCV做人脸识别和性别识别contrib
- OpenCV Python 学习笔记(五) 人脸识别
- 基于OpenCv的人脸检测、识别系统学习制作笔记之三
- C# OpenCV学习笔记六之人脸识别/五官识别测试
- python3.6.3+opencv3.3.0学习笔记七--人脸识别效果实录
- OpenCV学习笔记[3]Java Demo人脸识别
- python3.6.3+opencv3.3.0学习笔记八--本地视频人脸识别后另存
- opencv学习-Cascade Classifier-人脸人眼识别
- OpenCV学习笔记:人脸检测(级联分类器)
- 学习OpenCV——行人识别&人脸识别(总算运行出来了)
- 人脸与人眼识别 opencv自带例子
- OpenCV学习笔记(三)人脸检测的代码分析(2)
- 【OpenCV学习笔记】【教程翻译】一(基于SVM和神经网络的车牌识别概述)
- 【从零学习openCV】IOS7人脸识别实战
- OpenCV学习笔记(三)人脸检测的代码分析
- OpenCV学习笔记(三)人脸检测的代码分析
- 支持向量机学习笔记:LIBSVM应用(人脸识别)
- 学习opencv的趣事:关于人脸识别
- 学习OpenCV——行人识别&人脸识别(总算运行出来了)