您的位置:首页 > 编程语言 > Qt开发

VTK笔记20160726(1)

2016-07-26 08:11 232 查看
最近又拾起《VTK图形图像进阶》这本书,之前本来看过一阵子,因为忙于上课,就耽误了,现在有时间从头学习,把一些理解记录下来。

因为我觉得自己的记忆真是越来越差了,本来之前都懂了某些程序,几个星期不看,就忘得一干二净。

我不会把所有有用的都记下来,就记一些关键的吧~~


-------------------------------------------------------------------------------------------------------------------

环境Windows10+QT5.5+VS2010+VTK7.0+ITK4.9
-------------------------------------------------------------------------------------------------------------------

vtkSmartPointer<vtkActor> xxxActor =
vtkSmartPointer<vtkActor>::New();


定义一个类型为Actor的对象,这是VTK类实例化对象的基本用法,因为VTK每个类的构造函数都定义为保护成员。

之前看了很多程序,只知道应该这么做,现在知道原因了。

或者用:

vtkActor* xxxActor = vtkActor::New();


-------------------------------------------------------------------------------------------------------------------



从书上照下来的,比较直观理解Renderer;renderwindow;actor等关系,看说明真是很罗嗦。



还有这个管道图,之前看过很多遍,就觉得很复杂,现在理解了,这也是为什么一个简单的显示图片的VTK程序要那么多New();的原因

每一个部分都要实例一个对象,然后SetInputConnection等等。

-------------------------------------------------------------------------------------------------------------------

imageViewer->SetColorLevel(500);
imageViewer->SetColorWindow(2000);

设置窗位和窗宽,对于CT等医学图像,体素值范围在[-1000,2000],-1000是纯黑色,2000应该是纯白,但好像上限不一定是2000,甚至更多,但下限我可以确定是-1000.

所以可以设置窗位500,窗宽1500,或者2000也行吧,能显示的更全面

比较疑惑的是这个值和灰度图像0-255有什么关联。

-------------------------------------------------------------------------------------------------------------------

还有一个关于vtkImageView2的小笔记

View2中封装了Actor,Render,RenderWindow等渲染引擎,就是把上面管道的每一个部分集合在了一起,不用麻烦的每次都NEW一个新的小组件。所以用View2的时候,是可以没有具体的Actor的。

现在在做一个项目,一个学长问我你的Actor是哪几个,我找了半天也没找到,原来我这里写的是View2,所以没有显示Actor。

vtkSmartPointer<vtkImageViewer2> m_pImageViewer;

m_pImageViewer->SetInputData(reader->GetOutput());
m_pImageViewer->UpdateDisplayExtent();
m_pImageViewer->SetRenderWindow(m_qvtkWidget->GetRenderWindow());
m_pImageViewer->SetRenderer(m_pRenderder);
//m_pImageViewer->SetupInteractor(m_qvtkWidget->GetRenderWindow()->GetInteractor());
m_pImageViewer->SetColorLevel(0);
m_pImageViewer->SetColorWindow(2000);
m_pImageViewer->SetSliceOrientationToXY(); //默认就是这个方向的
m_pImageViewer->GetImageActor()->InterpolateOff();
m_pRenderder->ResetCamera();
m_pRenderder->DrawOn();
m_qvtkWidget->GetRenderWindow()->Render();
最上面是声明;

还有一个VTK7.0里用的是SetInputData,旧版本是SetInput.

这里我测试了一下

m_pImageViewer->SetupInteractor(m_qvtkWidget->GetRenderWindow()->GetInteractor());



这个是设置鼠标交互,在不注释的情况下,鼠标是可以按住左键在图像上移动的,移动后整个灰度值乱变!!(左右)





把上面的交互那句注销掉后:



再按住鼠标左键移动,实现了旋转功能,不过单张图片这个功能也没什么卵用。

应该是可以把这个鼠标交互彻底屏蔽的,不过我还没找到方法~~

今天的笔记暂时这么多吧
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  vtk qt5 itk