版权声明:小薛薛的博客 https://blog.csdn.net/qq_35007834/article/details/84097484
****只要会其中一个,另外的也就不难理解了。****
以新建VTK为例:
1、首先确保已经安装VTK;
2、在VTK目录下新建一个文件夹Mycode;
3、Mycode里面新建 .cpp文件,cmakelist.txt文件;(这里是我们的原码)
4、Mycode里面新建一个文件夹bin,用来生成工程;
5、在.cpp里复制:
//VTK 读mhd文件数据
//根据 vesselExtractor->SetValue(0, 70); //提取出CT值为70的可能是血管的对象;
//上面的 value值 70是阈值,可以更改
//code:
#include <vtkSmartPointer.h>
#include <vtkMetaImageReader.h>
#include "vtkVolume16Reader.h"
#include "vtkRenderWindowInteractor.h"
#include "vtkRenderer.h"
#include "vtkRenderWindow.h"
#include "vtkMarchingCubes.h"
#include "vtkStripper.h"
#include "vtkActor.h"
#include "vtkPolyDataMapper.h"
#include "vtkProperty.h"
#include <vtkLookupTable.h>
//
VTK_MODULE_INIT(vtkRenderingOpenGL2); // VTK was built with vtkRenderingOpenGL2
VTK_MODULE_INIT(vtkInteractionStyle);
int main(){
vtkSmartPointer<vtkMetaImageReader> Reader =vtkSmartPointer<vtkMetaImageReader>::New();
Reader->SetFileName("/Users/xiaoxuexue/VTK-8.1-2.1/3D_vessel/data/Sato.mhd"); //读血管mhd或者mha文件
Reader->Update();
cout<<"读取数据完成"<<endl;
//用Marching Cubes 算法
vtkMarchingCubes *vesselExtractor = vtkMarchingCubes::New(); //建立一个Marching Cubes 算法的对象
vesselExtractor->SetInputConnection(Reader->GetOutputPort()); //获得所读取的CT 数据
vesselExtractor->SetNumberOfContours(10);
vesselExtractor->SetValue(0, 72 ); //***********提取出CT值为70的可能是血管的对象*************
//将提取的等值面拼接成连续的
vtkStripper *vesselStripper = vtkStripper::New(); //建立三角带对象
vesselStripper->SetInputConnection(vesselExtractor->GetOutputPort()); //将生成的三角片连接成三角带
//映成集合数据,将其属性赋给窗口中代表它的演员,将结果显示出来。
vtkPolyDataMapper *vesselMapper = vtkPolyDataMapper::New(); //建立一个数据映射对象
vesselMapper->SetInputConnection(vesselStripper->GetOutputPort()); //将三角带映射为几何数据
vesselMapper->SetScalarRange(0,7);
//对象和对象属性等设置
vtkActor *vessel = vtkActor::New(); //建立一个代表血管的演员
vessel->SetMapper(vesselMapper); //获得血管几何数据的属性
vessel->GetProperty()->SetDiffuseColor(-4, -4, 0); //设置颜色的属性
vessel->GetProperty()->SetSpecular(.3); //设置反射率
vessel->GetProperty()->SetSpecularPower(20); //设置反射光强度
vessel->GetProperty()->SetColor(1,0.75,0); //直接设置对象的颜色
//显示数据
vtkRenderer *ren = vtkRenderer::New(); //建立绘制者
ren->SetBackground( 120, 120, 120 ); //窗口颜色,0-255从黑到白
//新建窗口
vtkRenderWindow *renWindow = vtkRenderWindow::New();
renWindow->SetSize(1000, 1000); //设置窗口大小
renWindow->AddRenderer(ren); //将绘制者加入绘制窗口
//交互
cout<<"正在绘制..."<<endl;
vtkRenderWindowInteractor *iren = vtkRenderWindowInteractor::New(); //对绘制结果进行交互操作
iren->SetRenderWindow (renWindow); // 告诉绘制者将要在绘制窗口中进行显示的演员
ren->AddActor(vessel); //血管
iren->Initialize();
iren->Start();
cout<<"绘制完成!"<<endl;
return 0;
}
6、在cmakelist.txt文件里复制:
cmake_minimum_required(VERSION 3.3 FATAL_ERROR)
PROJECT (3D_vessel) #工程名字
find_package(VTK REQUIRED) #添加VTK包
include(${VTK_USE_FILE})
add_executable(3D_vessel 3D_vessel.cxx) #这里是你的CPP文件名
target_link_libraries(3D_vessel ${VTK_LIBRARIES}) #
7、打开cmake,设置如下:
8、配置以后,出现下面,默认选择Xcode,done;
点击Configure,等待完成后,Generate即可。
有可能出现的报错:
这是因为找不到VTK_DIR所致:
解决这个问题,只需在你的文件夹里搜索VTKconfig.cmake 的位置添加到上面的位置即可:例如我搜索的结果是
把这个目录放在
再点击Configure,等待完成,Generate即可。
9、之后会显示Configure done,
Generate done;说明你生成工程成功了!!!!
执行open project,打开工程,运行:
或者在你的bin文件夹里也可以找到工程,这样的:
10、最后一步:运行
11、结果: