unsigned char *arVideoGetImage( void )
{
#ifdef FLIPPED
    int             i, j;
#endif

    if( open_flag == 0 )              return(NULL);

    if (!sequence.Pop(image, 20000)){
        printf("Couldn't get the image\n");
        return NULL;
    }

#ifdef FLIPPED
    // make a flipped copy
    for (j = 0; j < image.Height(); j++){
        for (i = 0; i < image.Width(); i++){
            flipped_image.Pixel(i,(image.Height()-1-j)).SetR( image.Pixel(i, j).R() );
            flipped_image.Pixel(i,(image.Height()-1-j)).SetG( image.Pixel(i, j).G() );
            flipped_image.Pixel(i,(image.Height()-1-j)).SetB( image.Pixel(i, j).B() );
            flipped_image.Pixel(i,(image.Height()-1-j)).SetA( image.Pixel(i, j).A() );
        }
    }
    return (unsigned char*)flipped_image.PbPixel(flipped_image.StartPoint());
#endif

//  printf("Size = [%d, %d]\n", image.Width(), image.Height());
    return (unsigned char*)image.PbPixel(image.StartPoint());

    return(NULL);
}
int  arVideoOpen(char *config)
{
    if( open_flag == 1 ) return(0);

    /* Connect to the VFW camera */
    VisAddProviderRegEntryForVFW();

    VisFindImageSource(sequence);

    if (!(sequence.HasImageSource()) || !(sequence.ImageSource().IsValid()))
        error_exit();

    // Don't use continuous grab since it chews up the processor like crazy
    sequence.ImageSource().SetUseContinuousGrab(false);

    // Grab an initial image
    if (!sequence.Pop(image, 40000))
    printf("Error in v_open: Couldn't get the image (init)\n");

    printf("Size = [%d, %d]\n", image.Width(), image.Height());


    open_flag = 1;
	
#ifdef FLIPPED
    // memory for a flipped copy of the image (for the USB camera)
    flipped_image.Allocate(image.Width(), image.Height());
#endif

    return(0);
}
int arVideoInqSize( int *x, int *y )
{
    if( open_flag == 0 ) return(-1);

    *x = image.Width();
    *y = image.Height();

    return(0);
}
Example #4
0
//////////////////////////////////////////////////////////////////////////\/
//  
//  FUNCTION:
//      VisMakePixelsInvisible
//  
//  DECLARATION:
//      static void VisMakePixelsInvisible(CVisRGBAByteImage &img, int v);
//  
//  PARAMETERS:
//      img - 
//          Image
//  
//      v - 
//			A value of the pixel to be set invisible.
//          
//  
//  DESCRIPTION:
//      
//		Sets all the pixels equal to (v,v,v,255) to be invisible (0,0,0,0).
//			
//  
//////////////////////////////////////////////////////////////////////////\/
void VisMakePixelsInvisible(CVisRGBAByteImage &img, int v)
{
    int rows = img.Height(), cols = img.Width()*img.NBands();
    for (int r = 0; r < rows; r++) {
        CVisRGBABytePixel input(v, v, v, 255);
        int iv = *(int *) &input;
        int *p = (int *) img.PtrToFirstPixelInRow(r + img.Top());
        for (int c = 0; c < cols; c++)
            if (p[c] == iv)
                p[c] = 0;
    }
}
Example #5
0
//////////////////////////////////////////////////////////////////////////\/
//  
//  FUNCTION:
//      VisBackInvisiblePixels
//  
//  DECLARATION:
//      static void VisBackInvisiblePixels(CVisRGBAByteImage &img, int v);
//  
//  PARAMETERS:
//      img - 
//          Image to which backing color should be added
//  
//      v - 
//			Gray-level value of backing pixel.
//          
//  
//  DESCRIPTION:
//      
//		Sets out to in OVER (v,v,v,255).
//      Also, sets any (v,v,v,255) value to (v+e,v+e,v+e,255), e = +/- 1
//			
//  
//////////////////////////////////////////////////////////////////////////\/
void VisBackInvisiblePixels(CVisRGBAByteImage &img, int v)
{
    int rows = img.Height(), cols = img.Width()*img.NBands();
    int ic, e = (v < 128) ? 1 : -1;
    *(CVisRGBABytePixel *) &ic = CVisRGBABytePixel(v, v, v, 255);
    int i0 = ic;
    *(CVisRGBABytePixel *) &ic = CVisRGBABytePixel(v+e, v+e, v+e, 255);
    int i1 = ic;
    CVisRGBABytePixel a_mask(0, 0, 0, 255);
    int ia_mask = *(int *) &a_mask;
    for (int r = 0; r < rows; r++) {
        CVisRGBABytePixel *p = img.PtrToFirstPixelInRow(r + img.Top());
        int *ip = (int *) p;
        for (int c = 0; c < cols; c++) {
#ifdef FASTER
            // Test 8 pixels at a time (speedup)
            if ((c & 7) == 0 && (c+7) < cols) {
                int *f = &ip[c];
                int f255 = f[0] & f[1] & f[2] & f[3] & 
                           f[4] & f[5] & f[6] & f[7];
                if ((f255 & ia_mask) == ia_mask) {
                    c += 7;
                    continue;   // all 8 pixels are opaque
                }
                int f000 = f[0] | f[1] | f[2] | f[3] | 
                           f[4] | f[5] | f[6] | f[7];
                if ((f000  & ia_mask) == 0) {
                    // all 8 pixels are transparent
                    f[0] = f[1] = f[2] = f[3] =
                    f[4] = f[5] = f[6] = f[7] = i0;
                    c += 7;
                    continue;
                }
            }
#endif
            if (ip[c] == 0)
                ip[c] = i0;
            else if (ip[c] == i0)
                ip[c] = i1;
            else if (p[c].A() != 255) {
                int w = ((255 - p[c].A())*v + 127)/255;
                p[c].SetR(p[c].R() + w);
				p[c].SetG(p[c].G() + w);
				p[c].SetB(p[c].B() + w);
				p[c].SetA(255);
            }
        }
    }
}