【OpenCV学习笔记 014】人脸人眼识别

来源:互联网 发布:php小说源码 编辑:程序博客网 时间:2024/06/05 12:07

源码示例

#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;}

运行结果


1 0
原创粉丝点击