<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&lt; double, 2 &gt;         ImageType;  </i></div><div><i>      typedef itk::ImageToVTKImageFilter&lt;ImageType&gt; ConnectorType;    </i></div><div><i>      typedef itk::ImageFileReader&lt;ImageType&gt; ReaderType;</i></div>
<div><i>      </i></div><div><i>      ReaderType::Pointer reader = ReaderType::New();      </i></div><div><i>      reader-&gt;SetFileName(file.c_str());      </i></div><div><i>      reader-&gt;Update();</i></div><div><i>      </i></div>
<div><i>      ConnectorType::Pointer connector = ConnectorType::New();          </i></div><div><i>      connector-&gt;SetInput(reader-&gt;GetOutput());      </i></div><div><i>      connector-&gt;Update();</i></div><div><i>      ImageReader *myReader = new ImageReader();</i></div>
<div><i>      vtkSmartPointer&lt;vtkImageViewer2&gt; vtkImageViewer = vtkSmartPointer&lt;vtkImageViewer2&gt;::New();      </i><br></div><div><i>      vtkImageViewer-&gt;SetInput(connector-&gt;GetOutput());      </i></div>
<div><i>      vtkImageViewer-&gt;SetRenderWindow(this-&gt;qvtkWidget-&gt;GetRenderWindow());      </i></div><div><i>      vtkImageViewer-&gt;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&lt;vtkImageViewer2&gt; vtkImageViewer = myReader-&gt;renderITKReaderInVTK(file);</i><i>      </i></div>
<div><i>      vtkImageViewer-&gt;SetRenderWindow(this-&gt;qvtkWidget-&gt;GetRenderWindow());      </i></div><div><i>      vtkImageViewer-&gt;Render();</i></div><div><i><br></i></div><div style>and the called function:</div>
<div style><br></div><div style><div><i>vtkSmartPointer&lt;vtkImageViewer2&gt; ImageReader::renderITKReaderInVTK(std::string fileName) {</i></div><div><i>    typedef itk::Image&lt; double, 2 &gt;         ImageType;  </i></div>
<div><i>    typedef itk::ImageToVTKImageFilter&lt;ImageType&gt; ConnectorType;    </i></div><div><i>    typedef itk::ImageFileReader&lt;ImageType&gt; ReaderType;</i></div><div><i>    </i></div><div><i>    ReaderType::Pointer reader = ReaderType::New();</i></div>
<div><i>    qDebug() &lt;&lt; &quot;Setting reader file name&quot;;</i></div><div><i>    reader-&gt;SetFileName(fileName.c_str());    </i></div><div><i>    qDebug() &lt;&lt; &quot;Updating reader&quot;;</i></div><div><i>    reader-&gt;Update();</i></div>
<div><i>    </i></div><div><i>    ConnectorType::Pointer connector = ConnectorType::New();    </i></div><div><i>    qDebug() &lt;&lt; &quot;Setting input to connector&quot;;</i></div><div><i>    connector-&gt;SetInput(reader-&gt;GetOutput());    </i></div>
<div><i>    qDebug() &lt;&lt; &quot;Updating connector&quot;;</i></div><div><i>    connector-&gt;Update();</i></div><div><i>    </i></div><div><i>    vtkSmartPointer&lt;vtkImageViewer2&gt; vtkImageViewer = vtkSmartPointer&lt;vtkImageViewer2&gt;::New();</i></div>
<div><i>    qDebug() &lt;&lt; &quot;Setting connector outupt -&gt; imageViewer input&quot;;    </i></div><div><i>    vtkImageViewer-&gt;SetInput(connector-&gt;GetOutput());    </i></div><div><i>    qDebug() &lt;&lt; &quot;Image viewer set up ready&quot;;    </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&#39;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>