Bonjour,
je me lance dans un projet d'imagerie medicale (charger, visualiser, traiter et sauver des donnees 2 ou 3d au format raw ou autre). J'utilise pour la premiere fois la librairie vtk.
Je code directement en c++ et j'ai du mal a trouver de la bonne documentation ou des exempls simples d'utilisation (surtout que la plupart sont ecrits en Tcl), c'est pourquoi j'ouvre ce sujet.
J'utilise un CMakeList.txt pour dire quelles librairies sont utiles et creer les liens necessaires a la compilation.
Premier probleme qui se pose, pour une simple visualisation basique d'une image 2d au format raw. Je la lit avec ImageReader, et je souhaite la visualiser avec vtkImageViewer.
J'ai trouve certains exemples ou imageviewer est utiliser avec reslice. Un autre exemple ou image viewer est utilise avec QT. Dans tous les cas le code etaient incomplet et je n'ai donc pas reussit a refaire cela. Pouvez-vous m'aider?
pourquoi a-ton besoin de QT? Dans ce cas, si on utilise QVTKWidget.h, quel package doit-on inclure dans le CMakeList?
Voici mon CMakeList :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 PROJECT( test ) SET( VTK_DIR /usr/lib/vtk-5.0 ) INCLUDE ( ${CMAKE_ROOT}/Modules/FindVTK.cmake ) IF ( USE_VTK_FILE ) INCLUDE( ${USE_VTK_FILE} ) ENDIF ( USE_VTK_FILE ) INCLUDE_DIRECTORIES(${OT_SOURCE_DIR}) ADD_EXECUTABLE( test main.cpp) TARGET_LINK_LIBRARIES( test vtkIO vtkGraphics vtkRendering QVTKWidget)
et un essai de lecture affichage :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60 #include "vtkImageReader.h" // to read an image #include "vtkImageViewer.h" //to display a 2d image //QT #include "QVTKWidget.h" #include "qapplication.h" #include <iostream> using namespace std ; int main(int argc, char **argv) { QApplication app(argc, argv); QVTKWidget widget; widget.resize(256,256); #if QT_VERSION < 0x040000 app.setMainWidget(&widget); #endif //lecture. essai fichier 2d vtkImageReader *monImg = vtkImageReader::New(); monImg->SetFileName("data/r15noise-slice110.vtk.dcm.raw"); monImg->SetNumberOfScalarComponents(1); monImg->SetDataExtent(0,511,0,511,0,0); monImg->SetDataScalarTypeToUnsignedChar(); //simple visualisation 2d vtkImageViewer* image_view = vtkImageViewer::New(); image_view->SetInputConnection(monImg->GetOutputPort()); widget.SetRenderWindow(image_view->GetRenderWindow()); image_view->SetupInteractor(widget.GetRenderWindow()->GetInteractor()); image_view->SetColorLevel(138.5); image_view->SetColorWindow(233); widget.show(); app.exec(); image_view->Delete(); monImg->Delete(); return 0; }
J'ai reussi a faire afficher l'image avec un simple viewer (je le cree, j'y met mon image puis je fais un Render) mais l'image s'affiche un quart de seconde et se ferme.
Partager