一、初步介绍

  上一个博客里面我记录了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的安装和例子构建过程:博客二

  

  

九、ITK-VTK混合编程--将序列dcm图像通过ITK读去并通过VTK显示出来的更多相关文章

  1. 十ITK读取一张dcm图像然后通过vtk显示

    一.功能 通过ITK读取一张图片(dcm格式),然后通过vtk显示出来. 版本:VS2019 itk5.0.1 vtk 8.2.0 二.程序主要思路 1-读取dcm格式图片 2-转换为vtk可以读取的 ...

  2. 九、ARM 汇编与 C 的混合编程

    9.1 ARM 汇编与 C 的混合编程 9.1.1 内嵌汇编 __asm __asm("指令")例如关闭/打开总中断开关 CPSR __asm //使用 C 中变量名代替寄存器 { ...

  3. FFT原理及C++与MATLAB混合编程详细介绍

    一:FFT原理 1.1 DFT计算 在一个周期内的离散傅里叶级数(DFS)变换定义为离散傅里叶变换(DFT). \[\begin{cases} X(k) = \sum_{n=0}^{N-1}x(n)W ...

  4. 如玫瑰一般的PHP与C#混合编程

    故事背景是这样的,有一套项目,服务器端是用C#写的,为了完成某种事情,它需要使用到一个组件,这个组件很小但很重要,很不巧的是,这个这个组件是用PHP语言写的,如果为了使用这个组件而专门搭建一个PHP的 ...

  5. C和C++混合编程中的extern "C" {}

    引言 在用C++的项目源码中,经常会不可避免的会看到下面的代码: 1 2 3 4 5 6 7 8 9 #ifdef __cplusplus extern "C" { #endif ...

  6. C# 托管和非托管混合编程

    在非托管模块中实现你比较重要的算法,然后通过 CLR 的平台互操作,来使托管代码调用它,这样程序仍然能够正常工作,但对非托管的本地代码进行反编译,就很困难.   最直接的实现托管与非托管编程的方法就是 ...

  7. [转载:]C#与Fortran混合编程之本地调用Fortran动态链接库

    前言 C#发展到现在,已是一门相当完善的语言,他基于C语言风格,演化于C++.并依靠强大的.NET底层框架.C#可以用来快速构建桌面及Web应用.然而在我们的实际工作中,尽管C#已经非常完善,但还是不 ...

  8. C#Matlab混合编程类 初始化问题解决方法

    ************** 异常文本 ************** System.TypeInitializationException: “myPlus.matClass”的类型初始值设定项引发异 ...

  9. 国内第一部C#.Net调用Matlab混合编程视频教程

       本博客所有文章分类的总目录:[总目录]本博客博文总目录-实时更新 Matlab和C#混合编程文章目录:[目录]Matlab和C#混合编程文章目录 一.视频说明 2014年的5.1,我将这套视频教 ...

随机推荐

  1. windows程序设计03_读取utf8文件

    这里用到的读取utf8文件的思路特别朴素.先把utf8文件按char读取到内存里.因为utf8是变长的,为了处理方便,在内存里把char转化成wchar_t,这样一个字符就是一个wchar_t.把ut ...

  2. 【数据结构05】红-黑树基础----二叉搜索树(Binary Search Tree)

    目录 1.二分法引言 2.二叉搜索树定义 3.二叉搜索树的CRUD 4.二叉搜索树的两种极端情况 5.二叉搜索树总结 前言 在[算法04]树与二叉树中,已经介绍过了关于树的一些基本概念以及二叉树的前中 ...

  3. JPEG算法解密

    图片压缩有多重要,可能很多人可能并没有一个直观上的认识,举个例子,一张800X800大小的普通图片,如果未经压缩,大概在1.7MB左右,这个体积如果存放文本文件的话足够保存一部92万字的鸿篇巨著< ...

  4. 3年Java开发10面阿里、京东、拼多多

    拼多多 地点:2号线娄山关路地铁站(金虹桥国际中心) 环境:新的写字楼,环境很好,有种高大上的感觉.大厅进入后需要登记,然后进闸机.电梯是需要刷卡才能使用的.会议室都是用城市名称命名,例如杭州.香港等 ...

  5. MySQL使用可重复读作为默认隔离级别的原因

    一般的DBMS系统,默认都会使用读提交(Read-Comitted,RC)作为默认隔离级别,如Oracle.SQL Server等,而MySQL却使用可重复读(Read-Repeatable,RR). ...

  6. Poco的介绍和入门教学

    版权声明:该文章为AirtestProject原创文章:允许转载,但转载必须注明“转载”并保留原链接 前言 前面我们已经介绍了基于图像识别的测试框架Airtest,通过图像识别,已经可以编写大部分的测 ...

  7. 从AlexNet(2012)开始

    目录 写在前面 网络结构 创新点 其他有意思的点 参考 博客:blog.shinelee.me | 博客园 | CSDN 写在前面 本文重点在于回顾深度神经网络在CV领域的First Blood--A ...

  8. 面试连环炮系列(一):如何保证Redis高可用和高并发

    如何保证Redis高可用和高并发? Redis主从架构,一主多从,可以满足高可用和高并发.出现实例宕机自动进行主备切换,配置读写分离缓解Master读写压力. Redis高可用方案具体怎么实施? 使用 ...

  9. js中数组去重方法及性能对比

    js中数组的 数组去重 常用的数组去重方法以及效率分析: 首先我们先构建一个数组,主要是用于进行去重实验,我们主要实验的量级为1000,10000,100000,500000.具体的生成数组的方法如下 ...

  10. Orcle如何获取当前时间

    Oracle获取当月所有日期: SELECT TRUNC(SYSDATE, 'MM') + ROWNUM - 1 FROM DUAL CONNECT BYROWNUM <= TO_NUMBER( ...