[vtkusers] Pass an itkimage::Pointer to a template function in a non template class
Antonin Perrot-Audet
antonin07130 at gmail.com
Wed May 12 14:58:03 EDT 2010
Sorry I sent it to the vtk list first, but this concerns itk & vtk users....
> Hello ITK users,
>
> I am facing a problem I guess many of you already solved :
> I wrote a non-template class, but I would like this class to accept
> both itk images and vtk images.
>
> In order to process the vtk images, I would like to create a template
> function within my non template class, that takes an itkimage::Pointer
> as input, internally convert it into a vtkimage* and store the
> vtkimage* in an array.
>
> It seems like I can't pass the itkimage::Pointer as an argument : If I
> try to write the image from within the function (with an itk writer),
> I write an empty image (of the good size !).
>
>
>
>
>
> here is a code example of what I am trying to do :
>
>
>
> 1) A simplified version of what I want to do :
>
> The version of my function (AddImage) that just writes the images from
> the function :
>
> ----------------myclass.h------------------
> // plenty of other functions
>
> template <typename TitkImage>
> void AddImage(typename TitkImage::Pointer iImage)
> {
> typedef itk::ImageFileWriter<TitkImage> WriterType;
> typename WriterType::Pointer itkwriter = WriterType::New();
>
> itkwriter->SetInput(iImage);
> itkwriter->SetFileName ("iktout.png");
> itkwriter->Update();
> itkwriter->Write();
> }
> -----------------------------------------------
>
>
> -----------------main.cpp-------------------
> int main( )
> {
> // declare an instance of myclass
>
> typedef itk::Image<unsigned short,2> ImageType;
> typedef itk::ImageFileReader<ImageType> itkreaderType;
>
> // setup the itk reader with the correct filename, and update it
>
> myclass->AddImage<ImageType>( itkreader->GetOutput() );
>
> return 0;
> }
>
> -----------------------------------------------
>
>
>
>
>
>
>
>
> 2) what I actually want to do :
>
> The version of myclass that imports an itkimage converts it as a vtk
> image and store it somewhere in myclass, main.cpp is the same as in 1)
>
> ----------------myclass.h-----------------
> // non template class definition and heritage
> // non template members and functions ...
>
> template <typename TitkImage>
> void AddImage(typename TitkImage::Pointer iImage, std::string
> iImageName ="")
> {
> typedef itk::ImageToVTKImageFilter<TitkImage> ConnectorType;
> typename ConnectorType::Pointer itkvtkConnector =
> ConnectorType::New();
>
> itkvtkConnector->SetInput(iImage);
> try
> {
> itkvtkConnector->Update();
> }
> catch( itk::ExceptionObject & exp )
> {
> std::cerr << exp << std::endl;
> }
>
> AddImage( itkvtkConnector->GetOutput() ); // call the other
> importer of myclass
>
> }
>
>
> void AddImage(vtkImageData* iImage); // a function that stores a
> vtkImageData* into an array
>
> // other stuff ....
>
> -----------------------------------------------
>
>
>
>
> I have already looked at :
> http://old.nabble.com/Smart-pointers-as-function-argument-ts26375719.html#a26375719
>
> but it doesn't answer my problem, as the itkimage is already bad
> inside my function.
>
> The weird thing is that if I print it from my function, it prints that
> the image is a 2D image, of correct dimensions, and of unsigned char
> pixel type.
>
>
> Well, if someone has an idea, that would help a lot !
>
> Thanks a lot,
>
> Antonin.
>
> PS: As soon as I am done with that thing, I will write a small script
> to build itk's nightly every night.
--
Antonin Perrot-Audet
Electrical Engineering& Computer Sciences, INSA Lyon
M2 GEGP Signal& Image Processing, INSA Lyon, UCBL, Centrale Lyon
More information about the vtkusers
mailing list