一、初步介紹
上一個博客里面我記錄了VTK的安裝,以及相關的工程代碼的構建,但是實際上上一個博客測試的代碼的例子僅僅只是VTK程序的例子。而我實際上希望能夠實現的是VTK和ITK混合編程。
在這里還是要簡單的說下,ITK只是擁有對於圖像處理的算是,但是始終都不能夠直接的顯示出來,沒有直觀性。
所以這里我們需要借助VTK去觀察,這也是我們需要VTK的關鍵所在。
但是VTK本身並不是為了這個而存在的,它也可以服務於其他的可視化的程序,只是我們在這里需要的是它服務於ITK而已。
下面的記錄按照時間為順序。先后記錄我們的遇到的問題。
版本介紹: VS2019
cmake 3.16
ITK:5.0.1
VTK:8.2.0
二、工程構建
1-代碼來源
main.cpp里面的代碼來自如下:https://blog.csdn.net/qq_35007834/article/details/88569821
代碼功能參考這個博客,它主要是讀取一系列的dcm圖像然后三維重建,通過VTK顯示出來。
具體的函數功能我還不是很了解。
2-建立工程
<1>建立一個空項目
<2>新建main.cpp, 將上面博客里面的代碼復制進去。
<3>我們注意到,代碼里面已經包含了下面兩個函數初始化
但是我們還是需要添加一個頭函數:
#include "vtkAutoInit.h"
具體原因參見這個博客:https://blog.csdn.net/kaspar1992/article/details/57080724
<4>添加項目屬性表
之前在博客一ITK的安裝,與博客八VTK的安裝里面,我們構建新的工程的時候,已經新建了兩個關於ITK和VTK的項目屬性表。
這個時候我們可以把這兩個項目屬性表復制到本工程所在的文件夾。(注意我在編譯所有工程的時候一直使用的是同一個模式,也就是Release X64)
然后打開屬性管理器,添加這兩個項目屬性表:
這個時候我的工程設置也是Release X64的模式:
5-修改配置屬性
與之前構建工程的時候一樣,這個時候我們需要在項目的配置屬性里面添加.dll文件所在的位置。
只不過與之前不一樣的是,我們之前需要添加一個文件夾,現在需要添加兩個文件夾(ITK和VTK的)
打開配置屬性:
這個時候我們在環境變量里面添加如下的句子:
path=%path%;D:\FilesSetup\ITK\itk_out\bin\;D:\FilesSetup\VTK\VTK-prefix\bin\
如果你有看過我之前的博客就知道,這里面的:
D:\FilesSetup\ITK\itk_out\bin\;
指的是我在安裝ITK的時候,運行INSTALL工程之后得到的四個文件夾里面的一個,也是包含了所有的.dll文件
同樣的
D:\FilesSetup\VTK\VTK-prefix\bin\
表示的是我在安裝VTK的過程中,INSTALL工程運行之后得到的四個文件夾之一。
這個時候看起來我們似乎已經把所有的工作都完成了,可以嘗試運行一下程序。
三、問題
1-Error:cannot open source file "itkImageToVTKImageFilter.h"
這個頭文件打不開,參考了如下鏈接:
https://blog.csdn.net/webzhuce/article/details/70552816?utm_source=blogxgwz7
解決辦法:
按照鏈接里面的方法,重新編譯ITK
這個時候還是按照博客一的過程編譯,但是cmake編譯中有幾個選項需要修改:
1-選擇下面的模塊Module:
勾選框中選項:
2-然后找到下面的選項:
在VTK_DIR里面添加VTK通過cmake編譯之后得到的文件夾,里面需要有VTK-CONFIG.cmake或者是vtk-config.cmake文件
這個時候按照博客一里面的內容重新來一遍。
2-錯誤
將程序里面的文件夾更改為dcm序列圖像所在的文件夾。
然后點擊運行。
運行之后得到如下的錯誤:
這個時候由於在新版本里面的sprintf函數(ITK和VTK使用的,已經逐漸的不符合VS的規定)
這個時候我們在程序開頭添加如下的代碼,以忽略上述錯誤(這個代碼的作用就是無視上面的那個錯誤):
#pragma warning(disable:4996)
四、運行程序
我輸入的圖像是一個人體脊椎的CT圖像,所以得到的結果如圖:
這個證明了我們構建工程的思路是沒有錯的,所以ITK和VTK的混合編程已經可以實現了。
注意:這里非常的消耗電腦內存,我第一次輸入了160張圖片,然后電腦處理了很久,我幾乎以為是程序出現了問題。
然后第二次將輸入的數據減少為7張,這個時候等待了大概十幾秒就出來結果了,所以程序沒有問題以后,如果不能夠運行出結果,這個時候我們要考慮一下是不是我們輸入的圖片的數目太多,導致電腦處理的時間太長。
五、參考鏈接
1-VTK編譯中出現 no override found for vtkpolydatamapper 解決方法
解決博客:https://blog.csdn.net/kaspar1992/article/details/57080724
2-代碼來源博客:https://blog.csdn.net/qq_35007834/article/details/88569821
3-博客一-ITK的安裝和例子構建過程:博客一
4-博客二-VTK的安裝和例子構建過程:博客二