我正在致力於一個項目旨在軌道眼睛瞳孔。爲此,我製作了一個捕捉眼睛圖像的頭戴式系統。硬件部分完成我在軟件部分。我正在使用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等)。這是可行嗎?如果是,我應該如何繼續?
這真的應該是一個新問題。 –
好的,這裏是http://stackoverflow.com/questions/8200031/transfer-output-of-opencv-to-input-for-a-game-engine – siso