OpenCV识别图片眼部中心定位点

2018-06-13  本文已影响14人  肉肉要次肉

` ` `

{

#include "highgui.h"

#include "cv.h"

#include

#include

#include

using namespace std;

using namespace cv;

void DetectAndDraw(IplImage* img, CascadeClassifier& cascade);

//String cascadeName = "haarcascade_frontalface_alt.xml";

//(识别脸部) String cascadeName = "haarcascade_eye_tree_eyeglasses.xml";

//nestedCascadeName (D:\眼动识别相关资料\opencv\build\etc\haarcascades) 

int main() 

CascadeClassifier cascade; 

cascade.load(cascadeName); 

cvNamedWindow("result", 1); 

IplImage* iplImg = cvLoadImage("timg.jpg"); 

DetectAndDraw(iplImg, cascade); 

cvWaitKey(0);

 cvDestroyWindow("result"); 

return 0; 

void DetectAndDraw(IplImage* img, CascadeClassifier& cascade) 

int i = 0; 

double t = 0; 

vector faces;//存坐标 

const static Scalar 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) }; 

IplImage* gray = cvCreateImage(cvGetSize(img), 8, 1); 

cvCvtColor(img, gray, CV_BGR2GRAY); 

cvEqualizeHist(gray, gray); 

Mat matGray = cvarrToMat(gray); 

t = (double)cvGetTickCount(); 

cascade.detectMultiScale(matGray, faces, //matGray图片,faces坐标 1.1, 2, 0 | CV_HAAR_SCALE_IMAGE , Size(30, 30)); 

t = (double)cvGetTickCount() - t; 

printf("detection time = %g ms\n", t / ((double)cvGetTickFrequency()*1000.)); 

for (vector::const_iterator r = faces.begin(); 

r != faces.end()

; r++, i++) 

{ Point center; Scalar color = colors[i % 8]; 

int radius;

 //center可以作为瞳孔的坐标 

center.x = cvRound(r->x + r->width*0.5); 

center.y = cvRound(r->y + r->height*0.5); 

//radius = (int)(cvRound(r->width + r->height)*0.25); 

radius = 2; 

cvCircle(img, center, radius, color, 3, 8, 0); 

cvShowImage("result", img); 

cvShowImage("result", img);

 }

}

` ` `

上一篇 下一篇

猜你喜欢

热点阅读