intVISION_ProcessFrame(VisionRangerange,VisionRangerange1,VisionRangerange2,BlobCoord*blob,BlobCoord*blob1,char*gameplay,char*color)//sofar,maximumdetect3colors,return2blobcoornidate(yellow,blue&Red)
{
IplImage*imgHSV=cvCreateImage(cvGetSize(frame),IPL_DEPTH_8U,3);//dst
cvCvtColor(frame,imgHSV,CV_BGR2HSV);//cvThreshold
IplImage*imgThreshed=cvCreateImage(cvGetSize(frame),IPL_DEPTH_8U,1);//dsw
if(*color!='3')
{
switch(*color)
{
case'0':
cvInRangeS(imgHSV,cvScalar(range.Hmin,range.Smin,range.Lmin,0),cvScalar(range.Hmax,range.Smax,range.Lmax,0),imgThreshed);
break;
case'1':
cvInRangeS(imgHSV,cvScalar(range1.Hmin,range1.Smin,range1.Lmin,0),cvScalar(range1.Hmax,range1.Smax,range1.Lmax,0),imgThreshed);
break;
case'2':
cvInRangeS(imgHSV,cvScalar(range2.Hmin,range2.Smin,range2.Lmin,0),cvScalar(range2.Hmax,range2.Smax,range2.Lmax,0),imgThreshed);
break;
}
if(TuneMode==1)
{
cvShowImage("ColourDetection",imgThreshed);
}
}
unsignedchar*data_ts=(unsignedchar*)imgThreshed->imageData,*data_hsv=(unsignedchar*)imgHSV->imageData;
intstep_ts=imgThreshed->widthStep/sizeof(unsignedchar),step_hsv=imgHSV->widthStep/sizeof(unsignedchar);
intchanels_hsv=imgHSV->nChannels;
inta,b;
unsignedcharH,S,V;
intmaxX[6]={0},maxY[6]={0};
into,p,q;
LoadValueColor(range,range1,range2);
for(a=0;aheight;a++)//cutwindowinY[0,240].ifnot,imgHSV->heightreadfromaboveis240
for(b=0;bwidth;b++)//cutwindowinX[0,320]examplefor(b=30;b=min[0]&&H=min[1]&&S=min[2]&&V=min1[0]&&H=min1[1]&&S=min1[2]&&V=min2[0]&&H=min2[1]&&S=min2[2]&&V=min3[0]&&H=min3[1]&&S=min3[2]&&Vh_next)
{
area1=fabs(cvContourArea(contour,CV_WHOLE_SEQ,1));
if(area150000)
{
cvSeqRemove(contour,0);
continue;
}
total=0;
total_S=0;
total_V=0;
for(l=0;ltotal;++l)
{
pt=(CvPoint*)cvGetSeqElem(contour,l);
H=data_hsv[step_hsv*pt->y+chanels_hsv*pt->x+0];
S=data_hsv[step_hsv*pt->y+chanels_hsv*pt->x+1];
V=data_hsv[step_hsv*pt->y+chanels_hsv*pt->x+2];
total=H+total;
total_S=S+total_S;
total_V=V+total_V;
}
avg=total/(contour->total);
avg_S=total_S/(contour->total);
avg_V=total_V/(contour->total);
if((avg>=min[0])&&(avg=min[1])&&(avg_S=min[2])&&(avg_VXmin=rect.x/2;
blob->Xmax=(rect.x+rect.width)/2;
blob->Ymin=rect.y;
blob->Ymax=rect.y+rect.height;
}
else
{
blob->Xmin=255;
blob->Xmax=255;
blob->Ymin=255;
blob->Ymax=255;
}
break;
}
|