/* ** Convert an RGB fpnum pvec to uint8. ** ** bf_pvec Input fpnum pvec (3xN) ** bl_pvec2 Output uint8 pvec (3xN) ** */ void pvec_to_uint8(buffer *bf_pvec,bbuffer **bl_pvec2) { int rows,cols,k,m; bbuffer *bf_pvec2; fpnum *data0; unsigned char *data1; rows=bf_pvec->rows; cols=bf_pvec->cols; data0=bf_pvec->data; bf_pvec2=bbuffer_new(rows,cols,1); data1=bf_pvec2->data; for(k=0;k<cols;k++) { for(m=0;m<rows;m++) { data1[m+k*rows]=(unsigned char)(data0[m+k*rows]*255.0); } } bl_pvec2[0]=bf_pvec2; }
int main( int argc, char** argv ) { int ikey=0; char key; IplImage *imCapt,*imDisp,*imDisp2; static int tb1_val,tb2_val; /* Trackbar parameters */ timewin *tw; buffer *bf_img; bbuffer *bf_blobs; int width,height; if(kb_lowresfl) { width=320; height=240; } else { width=640; height=480; } /* Set window title to a list of control keys */ const char *window1 = "Controls: (n)eighbours, (d)istance, (b)lur type, (h)igh-res, (c)olourspace, (r)eset, (ESC) exit"; const char *trackbar1 = "margin"; const char *trackbar2 = "timesteps"; int fno; cvInitSystem( argc,argv ); /* Get an OpenCV camera handle */ cam = cvCreateCameraCapture(0); /* Set size of image (appears to be ignored in Linux) */ cvSetCaptureProperty(cam, CV_CAP_PROP_FRAME_WIDTH, width); cvSetCaptureProperty(cam, CV_CAP_PROP_FRAME_HEIGHT, height); /* Create a window with slider */ cvNamedWindow(window1, CV_WINDOW_AUTOSIZE); cvSetMouseCallback(window1,callback_mouse, NULL ); tb_margin = DEF_MARGIN; /* Default */ tb1_val=tb_margin/TB1_SCALE*TB1_MAX; cvCreateTrackbar(trackbar1,window1,&tb1_val,TB1_MAX,callback_trackbar1); tb2_val = tb_timesteps = DEF_TIMESTEPS; /* Default */ cvCreateTrackbar(trackbar2,window1,&tb2_val,TB2_MAX,callback_trackbar2); cvMoveWindow(window1, 100, 45); /* Allocate image buffers */ if(kb_lowresfl) imDisp2 = cvCreateImage( cvSize(width*4,height*2), IPL_DEPTH_8U, 3); else imDisp2 = cvCreateImage( cvSize(width*2,height), IPL_DEPTH_8U, 3); imDisp = cvCreateImage( cvSize(width*2,height), IPL_DEPTH_8U, 3); bf_img = buffer_new(height,width,3); bf_blobs = bbuffer_new(height,width,3); tw=timewin_new(DEF_TIMESIZE); fno=0; key=(char)cvWaitKey(500); while ( key !=27 ) { imCapt = cvQueryFrame(cam); buffer_iplcopy(bf_img,imCapt,1); /* Detect blobs */ detect_and_render_blobs(bf_img,bf_blobs); /* Display result */ flip_image(imCapt,imDisp); paste_image(imDisp,bf_blobs,width); if(kb_lowresfl) { upsample_image(imDisp,imDisp2); cvShowImage(window1, imDisp2); } else { cvShowImage(window1, imDisp); } ikey=cvWaitKey(5); /* Needed for highgui event processing */ if(ikey>0) { key=(char)ikey; if(key == 'n') { kb_n8flag=1-kb_n8flag; printf("n8flag=%d\n",kb_n8flag); } if(key == 'd') { kb_normfl=1-kb_normfl; printf("normfl=%d\n",kb_normfl); } if(key == 'b') { kb_blurfl=1-kb_blurfl; printf("blurfl=%d\n",kb_blurfl); } if(key =='c') { kb_cspace=1-kb_cspace; /* Toggle colourspace */ printf("cspace=%d\n",kb_cspace); } if(key == 'r') { tb_margin=DEF_MARGIN; /* Reset to default */ tb1_val=tb_margin/TB1_SCALE*TB1_MAX; cvSetTrackbarPos(trackbar1,window1,tb1_val); tb2_val=tb_timesteps=DEF_TIMESTEPS; /* Reset to default */ cvSetTrackbarPos(trackbar2,window1,tb2_val); kb_n8flag=DEF_N8FLAG; kb_normfl=DEF_NORMFL; kb_blurfl=DEF_BLURFL; printf("timesteps =%d\n",tb_timesteps); printf("min_margin=%g\n",tb_margin); printf("n8flag=%d\n",kb_n8flag); printf("normfl=%d\n",kb_normfl); printf("blurfl=%d\n",kb_blurfl); cvWaitKey(1); /* printf("tb1:%d\n",cvGetTrackbarPos(trackbar1,window1)); */ /* printf("tb2:%d\n",cvGetTrackbarPos(trackbar2,window1)); */ } if(key == 'h') { kb_lowresfl=1-kb_lowresfl; /* Toggle resolution */ if(kb_lowresfl) { width=320; height=240; } else { width=640; height=480; } cvReleaseCapture(&cam); cam = cvCreateCameraCapture(0); /* Set size of image */ cvSetCaptureProperty(cam, CV_CAP_PROP_FRAME_WIDTH, width); cvSetCaptureProperty(cam, CV_CAP_PROP_FRAME_HEIGHT, height); /* Free image buffers */ cvReleaseImage( &imDisp ); buffer_free(bf_img); bbuffer_free(bf_blobs); /* Allocate image buffers */ imDisp = cvCreateImage( cvSize(width*2,height), IPL_DEPTH_8U, 3); bf_img = buffer_new(height,width,3); bf_blobs = bbuffer_new(height,width,3); } } timewin_addtime(tw); fno++; if((fno%DEF_TIMESIZE)==0) printf("Frame rate %g Hz\n",timewin_rate(tw)); } /* Clean up */ timewin_free(tw); buffer_free(bf_img); bbuffer_free(bf_blobs); cvDestroyAllWindows(); cvReleaseCapture(&cam); return 0; }