void MeanShiftTracking(uint8_t *frame)
{
	static char flag=0;

	static unsigned int initialCoordinates[2]={startYpoint+(windowSize/2),startXpoint+(windowSize/2)};
	unsigned int currentCoordinates[2]={0,0};

	static unsigned char  rgbTemplateImage[3*windowSize*windowSize];//3*windowSize*windowSize
	unsigned char  rgbCandidateImage[3*windowSize*windowSize];//3*windowSize*windowSize
	static	unsigned char  grayTemplateImage[windowSize*windowSize];//windowSize*windowSize
	unsigned char  grayCandidateImage[windowSize*windowSize];//windowSize*windowSize
	static unsigned char  filteredTemplateImage[windowSize*windowSize];//windowSize*windowSize
	unsigned char  filteredCandidateImage[windowSize*windowSize];//windowSize*windowSize
	static double  epanechnikovMask[windowSize*windowSize];//windowSize*windowSize
	static unsigned int templateHistogram[256]={0}; //unsigned char
	unsigned int candidateHistogram[256]={0};

  
	

	if (flag==0)
	{
		
		DrawRectangle(frame,initialCoordinates,0);
		if (HristoFlag)
		{
			GrabImage(frame,initialCoordinates,rgbTemplateImage);
			ConvertRgb2Gray(rgbTemplateImage,grayTemplateImage);
			EstimateEpanechnikovMask(epanechnikovMask);
			FilterEpanechnikov(grayTemplateImage,filteredTemplateImage,epanechnikovMask);
			EstimateHistogram(filteredTemplateImage,templateHistogram);
			flag=1;
		}
	}

	if (flag==1)
	{
		GrabImage(frame,initialCoordinates,rgbCandidateImage);
		ConvertRgb2Gray(rgbCandidateImage,grayCandidateImage);
		FilterEpanechnikov(grayCandidateImage,filteredCandidateImage,epanechnikovMask);
		EstimateHistogram(filteredCandidateImage,candidateHistogram);
		MeanShiftVectEstimate(initialCoordinates,currentCoordinates,templateHistogram,candidateHistogram,filteredCandidateImage);
		initialCoordinates[0]=currentCoordinates[0];
		initialCoordinates[1]=currentCoordinates[1];
		DrawRectangle(frame,initialCoordinates,1);
	}
}
int main()
{
    setup();
    unsigned long previous_time = 0;
    static int k = 0;
    uint8_t temp;
    struct timeval tv;
    struct timezone tz;
    write_reg(ARDUCHIP_MODE, 0x01);		 	//Switch to CAM

    while(1)
    {
        temp = read_reg(ARDUCHIP_TRIG);

        if(!(temp & VSYNC_MASK))				//New Frame is coming
        {
            write_reg(ARDUCHIP_MODE, 0x00);    	//Switch to MCU
            resetXY();
            write_reg(ARDUCHIP_MODE, 0x01);    	//Switch to CAM
            while(!(read_reg(ARDUCHIP_TRIG)&0x01)); 	//Wait for VSYNC is gone
        }
        else if(temp & SHUTTER_MASK)
        {
            gettimeofday (&tv , &tz);
            previous_time = tv.tv_sec;
            //printf("previous_time is %d.\n",previous_time);
            while(read_reg(ARDUCHIP_TRIG) & SHUTTER_MASK)
            {
                gettimeofday (&tv , &tz);
                //printf("put time is %d.\n",tv.tv_sec);
                if((tv.tv_sec - previous_time) >= 2)
                {
                    Playback();
                    delayms(1000);
                }
            }

            gettimeofday (&tv , &tz);
            if((tv.tv_sec - previous_time) < 2)
            {
                //printf(" get time is %d.\n",tv.tv_sec);
                memset(filePath,0,28);
                strcat(filePath,"/home/pi/");
                getnowtime();
                strcat(filePath,nowtime);
                strcat(filePath,".bmp");
                //Open the new file
                fp = fopen(filePath,"w+");
                if (fp == NULL)
                {
                    printf("open file failed\n");
                    return 0;
                }				//Generate file name
                write_reg(ARDUCHIP_MODE, 0x00);    	//Switch to MCU, freeze the screen
                GrabImage(filePath);
            }
        }
    }
}
Beispiel #3
0
void FadeToColor(unsigned msecs, RGBA color)
{
    IMAGE image = GrabImage(0, 0, GetScreenWidth(), GetScreenHeight());

    dword time = GetTime();
    while (GetTime() - time < msecs)
    {
        color.alpha = (byte)((GetTime() - time) * 255 / msecs);
        BlitImage(image, 0, 0, CImage32::BLEND);
        ApplyColorMask(color);
        FlipScreen();
    }

    DestroyImage(image);
}