Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Name : panopticon.cpp
- #include "panopticon.h"
- #include <stdio.h>
- int main(int argc, char *argv[]){
- // variable declarations
- const char* filename= VideoDir; //VideoDir is defined in the header
- IplImage* temp;
- // video stream in
- CvCapture* videofile=cvCreateFileCapture( filename ); //videofile dosyasina video atiyor
- //temp'e attigimiz ilk frame, dosya boyutu,
- //bitchannel hakkinda bilgi vercek
- temp=cvQueryFrame( videofile );
- IplImage* temp_gray=cvCreateImage(cvSize(temp->width,temp->height),temp->depth,1);
- cvCvtColor( temp, temp_gray, CV_RGB2GRAY );
- IplImage* image0=cvCloneImage(temp_gray);
- //IplImage* temp_gray=cvCreateImage(cvSize(image0->width,image0->height),image0->depth,1);
- //BG stat arrays:
- IplImage * MedianFrame =cvCreateImage(cvGetSize(image0),IPL_DEPTH_32F,1);
- IplImage * StddevFrame =cvCreateImage(cvGetSize(image0),IPL_DEPTH_32F,1);
- IplImage * bgmFrame =cvCreateImage(cvGetSize(image0),image0->depth,1);
- IplImage * bgnFrame =cvCreateImage(cvGetSize(image0),image0->depth,1);
- IplImage * bgdFrame =cvCreateImage(cvGetSize(image0),image0->depth,1);
- IplImage* BGFrameArray[bgLength];
- IplImage* image;
- char fname[50];
- // read BG images and build BG model
- if(has_BG_Model)
- {
- sprintf(fname, "/bgmFrame_%d.bmp",bgLength);
- bgmFrame = cvLoadImage(fname,CV_LOAD_IMAGE_GRAYSCALE);
- sprintf(fname, "/bgnFrame_%d.bmp",bgLength);
- bgnFrame = cvLoadImage(fname,CV_LOAD_IMAGE_GRAYSCALE);
- sprintf(fname, "/bgdFrame_%d.bmp",bgLength);
- bgdFrame = cvLoadImage(fname,CV_LOAD_IMAGE_GRAYSCALE);
- }
- // BG stat operations, for creating bg model from video input:
- else
- {
- BGFrameArray[0]=image0;
- //collect first 450 frame in BGFrameArray
- for( int bgCounter=1; bgCounter<bgLength;bgCounter++)
- {
- temp=cvQueryFrame( videofile );
- cvCvtColor( temp, temp_gray, CV_RGB2GRAY );
- image=cvCloneImage(temp_gray);
- BGFrameArray[bgCounter]=image; //BGFrameArray, ilk 450 frame ile dolduruluyor
- }
- //returns: std dev, median, max, min, maxdiff
- bgInitStats(StddevFrame, BGFrameArray, MedianFrame,bgmFrame, bgnFrame, bgdFrame);
- //record bg stat values:
- sprintf(fname,"C:/Users/kullaniciadi/Desktop/bitirme son hal/PanopticonV.0.2/bgmFrame_%d.bmp",bgLength);
- cvSaveImage(fname,bgmFrame);
- sprintf(fname,"C:/Users/kullaniciadi/Desktop/bitirme son hal/PanopticonV.0.2/bgnFrame_%d.bmp",bgLength);
- cvSaveImage(fname,bgnFrame);
- sprintf(fname,"C:/Users/kullaniciadi/Desktop/bitirme son hal/PanopticonV.0.2/bgdFrame_%d.bmp",bgLength);
- cvSaveImage(fname,bgdFrame);
- }
- //end of BG stat operations
- CvScalar dm;
- dm.val[0]=FindMedian(bgdFrame);
- cvNamedWindow( "Results", CV_WINDOW_AUTOSIZE );
- cvNamedWindow( "Boundary Boxes", CV_WINDOW_AUTOSIZE );
- //cvNamedWindow( "Boundary Boxes2", CV_WINDOW_AUTOSIZE );
- //Routine for displaying the foreground parts
- IplImage* temp2;
- CvScalar temp3=cvScalar(0);
- CvScalar tempMax=cvScalar(0);
- CvScalar tempMin=cvScalar(0);
- char key; //check for esc key
- //variables for the boundaries
- int num = 6;
- CvRect boundaryArray [num];
- CvPoint center[num];
- unsigned int PeopleInScene=6;
- IplImage* croppedImage2 [PeopleInScene]; //max number of peoples
- IplImage** CovMatrix = new IplImage*[PeopleInScene];
- IplImage** AvgMatrix = new IplImage*[PeopleInScene];
- printf("ekrana bisi bas \n");
- //fastforward for debugging
- for (int bgDCounter=0;bgDCounter<12;bgDCounter++)
- temp2 = cvQueryFrame( videofile );
- for (int bgDCounter=0;bgDCounter<2000;bgDCounter++)
- {
- if( !has_BG_Model && bgDCounter<bgLength )
- temp_gray = BGFrameArray[bgDCounter];
- else{
- temp2 = cvQueryFrame( videofile );
- if (!temp2->imageData)
- break;
- cvCvtColor( temp2, temp_gray, CV_RGB2GRAY );
- }
- for (int row=0;row<image0->height ;row++)
- for(int col =0; col<image0->width;col++)
- {
- temp3=cvGet2D(temp_gray,row,col);
- tempMax=cvGet2D(bgmFrame,row,col);
- tempMin=cvGet2D(bgnFrame,row,col);
- if(((temp3.val[0]-tempMax.val[0])<bgThreshold*dm.val[0]) && ((tempMin.val[0]-temp3.val[0])<bgThreshold*dm.val[0]))
- cvSet2D(temp_gray,row,col,cvScalar(0));
- else
- cvSet2D(temp_gray,row,col,cvScalar(255));
- }
- find_connected_components(temp_gray,1,4,& num,boundaryArray,center);
- cvShowImage( "Results" ,temp_gray);
- //sprintf(fname,"C:/cc.bmp");
- //cvSaveImage(fname,temp_gray);
- //Print Boundary Boxes and their centre points on image named boxedImage
- IplImage* boxedImage =cvCreateImage(cvSize(temp_gray->width,temp_gray->height), temp_gray->depth,temp_gray->nChannels);
- for (int t=0; t<num;t++)
- {
- //cx=center[t].x;
- //cy=center[t].y;
- for (int row=0;row<image0->height ;row++)
- for(int col =0; col<image0->width;col++)
- {
- /*if(row < (center[t].y + 10) && row > (center[t].y - 10)
- && col < (center[t].x + 10) && col > (center[t].x - 10))
- cvSet2D(boxedImage,row,col,cvScalar(0));
- else */
- if(row < (boundaryArray[t].y + boundaryArray[t].height) && row > boundaryArray[t].y
- && col < (boundaryArray[t].x + boundaryArray[t].width) && col > boundaryArray[t].x )
- cvSet2D(boxedImage,row,col,cvScalar(127));
- }
- }
- //sprintf(fname,"C:/box2.bmp");
- //cvSaveImage(fname,boxedImage);
- //cvShowImage( "Boundary Boxes" ,boxedImage);
- //next: get the boundary boxes by changing ROI / taking first one is done
- //how to allocate memory to save all of them?
- //next: apply pca on them
- //first find cov mat and then find largest eigenVec
- for (int t=0; num!=0 && t<num;t++)
- {
- int medX, medY;
- croppedImage2[t] =cvCreateImage(cvSize(boundaryArray[t].width,boundaryArray[t].height), temp_gray->depth,temp_gray->nChannels);
- cvSetImageROI(temp_gray,boundaryArray[t]);
- cvCopy(temp_gray, croppedImage2[t]);
- cvResetImageROI(temp_gray);
- CovMatrix[t] = cvCreateImage(cvSize(2,2), temp_gray->depth,temp_gray->nChannels);
- AvgMatrix[t] = cvCreateImage(cvSize(2,2), temp_gray->depth,temp_gray->nChannels);
- double sum =cvSumPixels(croppedImage2[t])/255;
- IplImage** pixPositions = new IplImage*[2];
- pixPositions[0] =cvCreateImage(cvSize(1,(int)sum),IPL_DEPTH_32F,1);
- pixPositions[1] =cvCreateImage(cvSize(1,(int)sum),IPL_DEPTH_32F,1);
- int k=0;
- for(int i=0; i< croppedImage2[t]->width;i++)
- for(int j=0; j<croppedImage2[t]->height; j++)
- if(cvGet2D(croppedImage2[t],j,i).val[0]==255)
- {
- cvSet1D(pixPositions[0],k,cvScalar(i));
- cvSet1D(pixPositions[1],k,cvScalar(j));
- k++;
- }
- // median of the objects are calculated here
- medX= (int)FindMedian(pixPositions[0]) + boundaryArray[t].x;
- medY= (int)FindMedian(pixPositions[1]) + boundaryArray[t].y;
- for (int row=(medX-5);row<=(medX+5);row++)
- for(int col =(medY-5); col<=(medY+5);col++)
- cvSet2D(boxedImage,col,row,cvScalar(255));
- //const IplImage ** CPixPos = cvClone(& pixPositions);
- // cvCalcCovarMatrix( (const CvArr **)pixPositions, 2, CovMatrix[t], AvgMatrix[t], CV_COVAR_ROWS);
- //
- // sprintf(fname,"C:/cov%d1.bmp",t);
- // cvSaveImage(fname,CovMatrix[t]);
- // sprintf(fname,"C:/cov%d2.bmp",t);
- // cvSaveImage(fname,AvgMatrix[t]);
- //PCA:
- //PrintMatrix((CvMat*) CovMatrix[t]);
- }
- //sprintf(fname,"C:/box3.bmp");
- //cvSaveImage(fname,boxedImage);
- cvShowImage( "Boundary Boxes" ,boxedImage);
- //release image files created for current frame
- for (int t=0; num!=0 && t<num;t++)
- {
- cvReleaseImage( &croppedImage2[t] );
- }
- key= cvWaitKey(3);
- if( key== 27 ) break; //cikmak icin escape
- }
- // cvReleaseImage( &temp_gray );
- // cvReleaseImage( &temp2 );
- cvReleaseCapture(&videofile);
- cvDestroyWindow( "Results" );
- cvDestroyWindow( "Boundary Boxes" );
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement