Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/134.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ ITK-VTK VTK图像查看器未定义_C++_Qt_Vtk_Itk - Fatal编程技术网

C++ ITK-VTK VTK图像查看器未定义

C++ ITK-VTK VTK图像查看器未定义,c++,qt,vtk,itk,C++,Qt,Vtk,Itk,我有一个关于编译一个小示例程序的严重问题,它应该使用VTK和ITK库。 该示例的目标是将Dicom图像从文件夹加载到VTK图像格式,将其转换为ITK图像格式,执行操作并将其转换回VTK图像格式以显示它们 以下是示例程序: #include <iostream> #include <math.h> #include <vtkSmartPointer.h> #include <vtkDICOMImageReader.h> #include &l

我有一个关于编译一个小示例程序的严重问题,它应该使用VTK和ITK库。 该示例的目标是将Dicom图像从文件夹加载到VTK图像格式,将其转换为ITK图像格式,执行操作并将其转换回VTK图像格式以显示它们

以下是示例程序:

#include <iostream>
#include <math.h>  


#include <vtkSmartPointer.h>
#include <vtkDICOMImageReader.h>
#include <vtkRenderer.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkResliceImageViewer.h>
#include <vtkRenderWindow.h>


#include "itkRelabelComponentImageFilter.h"
#include "itkImage.h"
#include "itkVTKImageToImageFilter.h"
#include "itkBinaryThresholdImageFilter.h"
#include "itkLabelGeometryImageFilter.h"
#include "itkImageToVTKImageFilter.h"
#include "itkConnectedComponentImageFilter.h"
#include "itkBinaryImageToLabelMapFilter.h"
#include "itkLabelMapToLabelImageFilter.h"

#include "markerLib/markerlib.h"

int main(int argc, char *argv[]) {

    const unsigned int Dimension = 3;

    //Image Type
    typedef itk::Image<short, Dimension> ShortImageType;

    //Types for converting between ITK and VTK
    typedef itk::VTKImageToImageFilter<ShortImageType> VTKImageToImageType;
    typedef itk::ImageToVTKImageFilter<ShortImageType> ConnectorType;


    //Read DICOM Data
    vtkSmartPointer<vtkDICOMImageReader> reader = vtkSmartPointer<vtkDICOMImageReader>::New();
    reader->SetDirectoryName("some_path");//Type the correct absolute path to the Dicom data here.
    reader->Update();


    //Converting to ITK Image Format
    VTKImageToImageType::Pointer vtkImageToImageFilter = VTKImageToImageType::New();
    vtkImageToImageFilter->SetInput(reader->GetOutput());
    vtkImageToImageFilter->Update();

    //Converting Back from ITK to VTK Image for Visualization.
    ConnectorType::Pointer connector = ConnectorType::New();
    connector->SetInput(vtkImageToImageFilter->GetOutput());
    //connector->SetInput(removed->GetOutput()); //The current Threshold(minVoxelCount) seems to be to high. because the marker is not visible if looking at the filtered set.
    connector->Update();


//    //Showing slice imagesvtkResliceImageViewer
    vtkSmartPointer<vtkResliceImageViewer>viewer = vtkSmartPointer<vtkResliceImageViewer>::New();
    vtkSmartPointer<vtkRenderWindowInteractor>interactor = vtkSmartPointer<vtkRenderWindowInteractor>::New();
    interactor->SetRenderWindow(viewer->GetRenderWindow());

    viewer->SetupInteractor(interactor);
    viewer->SetInputData(connector->GetOutput());
    int midslice = viewer->GetSliceMax() / 2;
    viewer->SetSlice(midslice);
    viewer->SetSliceOrientationToXY();

    viewer->GetRenderer()->ResetCamera();
    viewer->Render();
    interactor->Start();
    return EXIT_SUCCESS;
}
尝试编译程序时,会引发以下错误:

Scanning dependencies of target marker
[100%] Building CXX object CMakeFiles/marker.dir/main.cpp.o
Linking CXX executable marker
CMakeFiles/marker.dir/main.cpp.o: In function `vtkSmartPointer<vtkResliceImageViewer>::New()':
main.cpp:(.text._ZN15vtkSmartPointerI21vtkResliceImageViewerE3NewEv[_ZN15vtkSmartPointerI21vtkResliceImageViewerE3NewEv]+0xd): undefined reference to `vtkResliceImageViewer::New()'
collect2: error: ld returned 1 exit status
make[2]: *** [marker] Error 1
make[1]: *** [CMakeFiles/marker.dir/all] Error 2
make: *** [all] Error 2
奇怪的是,在另一台机器上,程序编译时没有任何错误,并且运行正常。因此,VTK和ITK在相当复杂的编译步骤上肯定存在一些差异


我现在的问题是,是否有人看到了类似的错误,或者有人知道VTK LIB丢失的原因是什么?

我以前对此有过疑问。 ITK的find_包正在覆盖VTK_库。解决方法是将库存储在临时变量中,如下所示:

find_package(VTK) 
set(VTK_LIBS_ORIG ${VTK_LIBRARIES})  # store the libs in an extra variable
include(${VTK_USE_FILE})

find_package(ITK)
include(${ITK_USE_FILE})

# now restore the variables back:
set(VTK_LIBRARIES ${VTK_LIBS_ORIG})
嗯,,
米罗

非常感谢。ITK确实覆盖了VTK_库。你的变通办法解决了我们的问题。
VTK vtkCommonCore;vtksys            ITK  itkdouble-conversion;itksys;itkvnl_algo;itkvnl;itkv3p_netlib;ITKCommon;itkNetlib........
find_package(VTK) 
set(VTK_LIBS_ORIG ${VTK_LIBRARIES})  # store the libs in an extra variable
include(${VTK_USE_FILE})

find_package(ITK)
include(${ITK_USE_FILE})

# now restore the variables back:
set(VTK_LIBRARIES ${VTK_LIBS_ORIG})