我正在研究一个旨在跟踪眼睛瞳孔的项目。为此,我制作了一个头戴式系统,可以捕捉眼睛的图像。完成了硬件部分,我对软件部分感到震惊。我正在使用opencv。请让我知道跟踪学生的最有效方法是什么。Houghcircles表现不佳。
之后我也尝试过使用HSV过滤器,这里是原始图像的截图和处理过的代码和链接。请帮我解决这个问题。该链接还包含我在此代码中使用的眼瞳视频。
代码:
include "cv.h"
include"highgui.h"
IplImage* GetThresholdedImage(IplImage* img)
{
IplImage *imgHSV=cvCreateImage(cvGetSize(img),8,3);
cvCvtColor(img,imgHSV,CV_BGR2HSV);
IplImage *imgThresh=cvCreateImage(cvGetSize(img),8,1);
cvInRangeS(imgHSV,cvScalar(0, 84, 0, 0),cvScalar(179, 256, 11, 0),imgThresh);
cvReleaseImage(&imgHSV);
return imgThresh;
}
void main(int *argv,char **argc)
{
IplImage *imgScribble= NULL;
char c=0;
CvCapture *capture;
capture=cvCreateFileCapture("main.avi");
if(!capture)
{
printf("Camera could not be initialized");
exit(0);
}
cvNamedWindow("Simple");
cvNamedWindow("Thresholded");
while(c!=32)
{
IplImage *img=0;
img=cvQueryFrame(capture);
if(!img)
break;
if(imgScribble==NULL)
imgScribble=cvCreateImage(cvGetSize(img),8,3);
IplImage *timg=GetThresholdedImage(img);
CvMoments *moments=(CvMoments*)malloc(sizeof(CvMoments));
cvMoments(timg,moments,1);
double moment10 = cvGetSpatialMoment(moments, 1, 0);
double moment01 = cvGetSpatialMoment(moments, 0, 1);
double area = cvGetCentralMoment(moments, 0, 0);
static int posX = 0;
static int posY = 0;
int lastX = posX;
int lastY = posY;
posX = moment10/area;
posY = moment01/area;
// Print it out for debugging purposes
printf("position (%d,%d)\n", posX, posY);
// We want to draw a line only if its a valid position
if(lastX>0 && lastY>0 && posX>0 && posY>0)
{
// Draw a yellow line from the previous point to the current point
cvLine(imgScribble, cvPoint(posX, posY), cvPoint(lastX, lastY), cvScalar(0,255,255), 5);
}
// Add the scribbling image and the frame...
cvAdd(img, imgScribble, img);
cvShowImage("Simple",img);
cvShowImage("Thresholded",timg);
c=cvWaitKey(3);
cvReleaseImage(&timg);
delete moments;
}
//cvReleaseImage(&img);
cvDestroyWindow("Simple");
cvDestroyWindow("Thresholded");
}
我能够跟踪眼睛并精确找到瞳孔的中心坐标。
首先,我对头戴式相机拍摄的图像进行阈值处理。之后我使用了轮廓查找算法,然后我找到了所有轮廓的质心。这给了我眼睛瞳孔的中心坐标,这种方法可以实时正常工作,并且可以非常准确地检测眨眼。
现在,我的目标是将此功能嵌入到游戏(赛车游戏)中。如果我向左/向右看,那么汽车会向左/向右移动,如果我眨眼,汽车就会减速。我现在怎么继续???我需要一个游戏引擎来做到这一点吗?
我听说过一些与visual studio 2010(unity 等)兼容的开源游戏引擎。可行吗???如果是,我应该如何进行?