Beispiel #1
0
/*
** 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;
}
Beispiel #2
0
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;
}