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

` ` `

{

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

 }

}

` ` `

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容