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

QT和VTK联合显示图像时发生扭曲变形的问题解决

2017-03-13 19:32 429 查看
本文由Markdown语法编辑器编辑完成。

1. 问题提出背景:

  基于本博客之前的一篇博文《QT+VTK: 如何在QT中显示VTK生成的图像》,主要讲解了一般医学软件是如何基于QT和VTK的基础,进行医学图像的渲染和展示的。

  前段时间在实现一个需求——在一个窗口中显示一个序列的部分图像。这就需要在QT的一个布局窗口(QWidget/QLayout)中,再内建一个QGridLayout,然后将序列图像依次布局在子layout中。然后,随着QGridLayout的行和列不断增加,最后当增加一定程度时,会导致布局内部的部分图像发生扭曲变形。效果如下图所示:





  两幅图中,第一幅图的主布局是1行2列,在左侧是一张X光图像,在右侧的布局中显示的是一组CT序列的图像。内部是一个QGridLayout,它会随着布局内需要显示的图像层数,来动态地调整行和列的数字。可以看到,当显示的图像层片数从25层,再增加一层时。即由五行五列到五行六列时,之前显示正常的图像突然很多都发生了扭曲变形,如第2张图中紫色线框包含的那2列图像。

  本文主要分析,产生这个问题的原因,和最后的解决方案。

2. 问题解决思路:

  在解决这个问题时,首先需要理解这个图像是如何显示在前台的界面中的。这里涉及到VTK的渲染,QImage的显示,QWidget的事件机制,像素拷贝等基础知识。用一句话概括这个过程就是:

VTK在后台进行图像渲染,然后渲染出的图像按照像素,逐个拷贝到一个QImage中,QWidget利用它的paintEvent事件响应,将拷贝后的QImage显示在QWidget中。

因此,要调研这个图像变形的问题,就需要从这几个环节中去排查,看到底是哪一个环节出了问题,然后再对症下药,解决问题。

3. 问题解决方案:

最终在了解了问题产生的原因,和提出相应的解决方案后,修改代码后,再增加显示的图像层数时,所有的图像层便可以正常显示。如下图所示。



未完待续……
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: