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