[vtkusers] how to display RGB array/image using vtkImageImport

David Gobbi david.gobbi at gmail.com
Wed Mar 5 15:13:25 EST 2008


Actually I just took a closer look at your code, and I think that I
see a mistake:

importer->SetDataScalarTypeToInt();

is incorrect if your data is 8-bit, instead it should be

importer->SetDataScalarTypeToUnsignedChar();

    David



On Wed, Mar 5, 2008 at 3:07 PM, David Gobbi <david.gobbi at gmail.com> wrote:
> And you might also have to set the following:
>
>  viewer->GetWindowLevel()->SetWindow(255.0);
>  viewer->GetWindowLevel()->SetLevel(127.5);
>
>    David
>
>
>
>
>
>  On Wed, Mar 5, 2008 at 3:04 PM, David Gobbi <david.gobbi at gmail.com> wrote:
>  > Hi Elvis,
>  >
>  >  I looked at the vtkImageViewer2 code, and it creates a default color
>  >  table for you.  If you get rid of its color table, it should display the RGB
>  >  data directly.
>  >
>  >  The command to get rid of the viewer's color table is as follows:
>  >
>  >  viewer->GetWindowLevel()->SetLookupTable(0);
>  >
>  >    David
>  >
>  >
>  >
>  >
>  >  On Wed, Mar 5, 2008 at 2:48 PM, Elvis Chen <elvis.chen at gmail.com> wrote:
>  >  > hello,
>  >  >
>  >  > I'm trying to import video/still-images from an ultra-sound machine and
>  >  > display it using vtk.  I can grab an image from the frame-grabber and save
>  >  > the image as PPM (basically RGB values with some headers).  The range of the
>  >  > RGB is [0..255] and I know the dimension of the image.
>  >  >
>  >  > Instead of saving it to a file I want vtk to grab the array pointer and
>  >  > display it directly.  My code looks like:
>  >  >
>  >  >   vtkImageImport *importer = vtkImageImport::New();
>  >  >   importer->SetWholeExtent( 0, 719, 0, 479, 0, 0 );
>  >  >    importer->SetDataExtentToWholeExtent();
>  >  >   importer->SetDataScalarTypeToInt();
>  >  >   importer->SetNumberOfScalarComponents( 3 );
>  >  >   importer->SetImportVoidPointer( h.imageRGB );
>  >  >
>  >  >   vtkImageFlip *flip = vtkImageFlip::New();
>  >  >    flip->SetInputConnection( importer->GetOutputPort() );
>  >  >   flip->SetFilteredAxis( 1 );
>  >  >
>  >  >   vtkImageViewer2 *viewer = vtkImageViewer2::New();
>  >  >   viewer->SetInputConnection( flip->GetOutputPort() );
>  >  >    viewer->SetZSlice( 0 );
>  >  >
>  >  >
>  >  > where h.imageRGB is a pointer to integer array whose size is 720x480x3.  The
>  >  > RGB are stored as [R0 G0 B0 R1 G1 B2 ... ] in h.imageRGB.  The first pixel
>  >  > is on the top-left corner so I need to use vtkImageFlip to get the correct
>  >  > orientation.
>  >  >
>  >  > The resulting image displayed fine except for the colour.  It looks like a
>  >  > gray-scale image where as the original US image has come coloured region.
>  >  > Can someone please shed some light into what might be wrong?  Is there a
>  >  > function to get the range of pixel value (to 0 to 255)?
>  >  >
>  >  > Any help is very much appreciated,
>  >  >
>  >  > Elvis
>  >  >
>  >  > _______________________________________________
>  >  >  This is the private VTK discussion list.
>  >  >  Please keep messages on-topic. Check the FAQ at:
>  >  > http://www.vtk.org/Wiki/VTK_FAQ
>  >  >  Follow this link to subscribe/unsubscribe:
>  >  >  http://www.vtk.org/mailman/listinfo/vtkusers
>  >  >
>  >  >
>  >
>



More information about the vtkusers mailing list