opencv 人脸识别代码

原创 2016年05月30日 16:54:34

人脸识别代码:

#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:\\opencv_3.1.0\\opencv\\data\\haarcascades_cuda\\haarcascade_frontalface_alt.xml";   //此处用的是绝对路径,可自己拷贝到工程路径下

int main( int argc, char** argv ) 
{ 
	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 = "D:\\heying.jpg"; 
	IplImage* image = cvLoadImage( filename, 1 );

	if( image ) 
	{ 
		detect_and_draw( image ); 
		cvWaitKey(0); 
		cvReleaseImage( &image );   
	}

	cvDestroyWindow("result"); 

	return 0; 
}

void detect_and_draw(IplImage* img ) 
{ 
	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

	//Image Preparation 
	// 
	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);

	cvShowImage( "small_img", small_img ); 

	cvEqualizeHist(small_img,small_img); //直方图均衡

	cvShowImage( "EqualizeHist_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(20,20));

	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], 2, 2, 0 ); 
	}

	cvShowImage( "result", img ); 
	cvReleaseImage(&gray); 
	cvReleaseImage(&small_img); 
}


效果图:





人脸识别《一》opencv人脸识别之收集人脸并学习

收集人脸

人脸识别《一》opencv人脸识别之人脸检测

opencv中已经有人脸识别的功能了,所以来看看整个流程以及具体实现

OpenCV中人脸识别代码实现

声明:本文代码来源于http://www.cognotics.com/opencv/servo_2007_series/,实现平台为Linux+OpenCV,共分为两部分:人脸检测与人脸识别。本文为后...

人脸识别最简代码 基于opencv3.3

  • 2017年11月01日 11:59
  • 3KB
  • 下载

opencv 人脸识别 代码

  • 2016年10月18日 10:15
  • 485KB
  • 下载

OpenCV中人脸识别代码实现

声明:本文代码来源于http://www.cognotics.com/opencv/servo_2007_series/,实现平台为Linux+OpenCV,共分为两部分:人脸检测与人脸识别。本文为后...
  • pds2008
  • pds2008
  • 2014年09月18日 21:19
  • 8326

基于opencv的人脸识别代码

  • 2016年03月27日 19:52
  • 3KB
  • 下载

基于PCA的人脸识别opencv代码

  • 2014年06月04日 10:25
  • 10KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:opencv 人脸识别代码
举报原因:
原因补充:

(最多只允许输入30个字)