<div dir="ltr"><div style>Hello all. I have a simple code that reads an image using ITK, then it convert it to VTK and after that I display the image in a QVTKWidget. The code is this and works fine: </div><div><br></div>
<div> <i> typedef itk::Image< double, 2 > ImageType; </i></div><div><i> typedef itk::ImageToVTKImageFilter<ImageType> ConnectorType; </i></div><div><i> typedef itk::ImageFileReader<ImageType> ReaderType;</i></div>
<div><i> </i></div><div><i> ReaderType::Pointer reader = ReaderType::New(); </i></div><div><i> reader->SetFileName(file.c_str()); </i></div><div><i> reader->Update();</i></div><div><i> </i></div>
<div><i> ConnectorType::Pointer connector = ConnectorType::New(); </i></div><div><i> connector->SetInput(reader->GetOutput()); </i></div><div><i> connector->Update();</i></div><div><i> ImageReader *myReader = new ImageReader();</i></div>
<div><i> vtkSmartPointer<vtkImageViewer2> vtkImageViewer = vtkSmartPointer<vtkImageViewer2>::New(); </i><br></div><div><i> vtkImageViewer->SetInput(connector->GetOutput()); </i></div>
<div><i> vtkImageViewer->SetRenderWindow(this->qvtkWidget->GetRenderWindow()); </i></div><div><i> vtkImageViewer->Render();</i></div><div><br></div><div><br></div><div style><b>Now if I change this code and create a separate function to perform the connection from ITK to VTK, I get a segfault:</b></div>
<div style><b><br></b></div><div style><div><i>ImageReader *myReader = new ImageReader();</i></div><div><i> vtkSmartPointer<vtkImageViewer2> vtkImageViewer = myReader->renderITKReaderInVTK(file);</i><i> </i></div>
<div><i> vtkImageViewer->SetRenderWindow(this->qvtkWidget->GetRenderWindow()); </i></div><div><i> vtkImageViewer->Render();</i></div><div><i><br></i></div><div style>and the called function:</div>
<div style><br></div><div style><div><i>vtkSmartPointer<vtkImageViewer2> ImageReader::renderITKReaderInVTK(std::string fileName) {</i></div><div><i> typedef itk::Image< double, 2 > ImageType; </i></div>
<div><i> typedef itk::ImageToVTKImageFilter<ImageType> ConnectorType; </i></div><div><i> typedef itk::ImageFileReader<ImageType> ReaderType;</i></div><div><i> </i></div><div><i> ReaderType::Pointer reader = ReaderType::New();</i></div>
<div><i> qDebug() << "Setting reader file name";</i></div><div><i> reader->SetFileName(fileName.c_str()); </i></div><div><i> qDebug() << "Updating reader";</i></div><div><i> reader->Update();</i></div>
<div><i> </i></div><div><i> ConnectorType::Pointer connector = ConnectorType::New(); </i></div><div><i> qDebug() << "Setting input to connector";</i></div><div><i> connector->SetInput(reader->GetOutput()); </i></div>
<div><i> qDebug() << "Updating connector";</i></div><div><i> connector->Update();</i></div><div><i> </i></div><div><i> vtkSmartPointer<vtkImageViewer2> vtkImageViewer = vtkSmartPointer<vtkImageViewer2>::New();</i></div>
<div><i> qDebug() << "Setting connector outupt -> imageViewer input"; </i></div><div><i> vtkImageViewer->SetInput(connector->GetOutput()); </i></div><div><i> qDebug() << "Image viewer set up ready"; </i></div>
<div><i> return vtkImageViewer;</i></div><div><i>}</i></div><div><br></div><div style>Any ideas why the same code (I think) works if it is all together but fail when it's in a different function?</div><div style><br>
</div><div style>Thanks in advance!</div><div style>Regards,</div><div style>Manuel.</div></div></div><div style><br></div><div style><br></div></div>