使用itk编程实例详解.docx
《使用itk编程实例详解.docx》由会员分享,可在线阅读,更多相关《使用itk编程实例详解.docx(18页珍藏版)》请在冰豆网上搜索。
使用itk编程实例详解
步骤:
1、创建项目文件夹,包括源文件和生成文件夹
如:
test,test-bin,
前者test用于存放源代码(c++),CMakeLists.txt的cmake配置文件
后者test-bin用于存放经过cmake编译后生成的文件(工程文件.sln等)
2、编写源代码文件和CMakeLists.txt文件
Cmake基本语法
注:
cmake命令最好大写
1. #表示注释
2. 变量:
使用set命令显式定义及赋值,在非if语句中,使用${}引用,if中直接使用变量名引用;后续的set命令会清理变量原来的值;
3. command(args...) #命令不分大小写,参数使用空格分隔,使用双引号引起参数中空格
4. set(vara;b;c)<=>set(varabc) #定义变量var并赋值为a;b;c这样一个stringlist
5. Add_executable(${var})<=>Add_executable(abc) #变量使用${xxx}引用
6. 条件语句:
if(var)#var 非empty0NNoOFFFALSE...#非运算使用NOT
…
else()/elseif()…endif(var)
7. 循环语句
Set(VARabc)
Foreach(f${VAR}) …Endforeach(f)
8. 循环语句
WHILE()…ENDWHILE()
Cmake命令:
链接来源:
1、PROJECT(HELLO)#指定项目名称,生成项目名称
使用${HELLO_SOURCE_DIR}表示项目根目录
2、INCLUDE_DIRECTORIES#指定头文件的搜索路径
INCLUDE_DIRECTORIES(${HELLO_SOURCE_DIR})#指定HELLO项目源文件根目录
3、TARGET_LINK_LIBRARIES#添加链接库
TARGET_LINK_LIBRARIES(HELLO${ITK_LIBRARIES})
#将可执行文件与ITK_LIBRARIES链接成最终文件HELLO
4、ADD_EXECUTABLE#编译可执行程序,指定编译
ADD_EXECUTABLE(HELLOhello.cxx)#将hello.cxx编译成可执行文件
CMakeLists.txt(cmake配置文件)
#注明cmake最低版本要求,不写会报错或警告
cmake_minimum_required(VERSION2.8)
#定义项目名称为SHOWPIC,和可执行文件showpic没有任何关系
PROJECT(SHOWPIC)
#找ITK的包,如果找到就加载进来
FIND_PACKAGE(ITK)
IF(ITK_FOUND)
INCLUDE(${USE_ITK_FILE})
ENDIF(ITK_FOUND)
#指定SHOPIC项目源文件根目录的搜索路径
INCLUDE_DIRECTORIES(${SHOWPIC_SOURCE_DIR})
#指定编译可执行程序,将showpic.cxx编译成可执行文件
ADD_EXECUTABLE(SHOWPICshowpic.cxx)
#将可执行文件与ITK_LIBRARIES链接成最终文件SHOWPIC
TARGET_LINK_LIBRARIES(SHOWPIC${ITK_LIBRARIES})
Showpic.cxx(cxx中的x是x,y,z的x)
#include"itkImage.h"
#include"itkImageFileReader.h"
#include"itkImageFileWriter.h"
intmain(int,char*argv[])
{
//通过指定表示图像的像素和维数的值来定义图像的类型。
typedefunsignedcharPixelType;
constunsignedintDimension=2;
typedefitk:
:
ImageImageType;
//以reader和writer的类型为例,这两个类通过图像类型被参数化:
typedefitk:
:
ImageFileReaderReaderType;
typedefitk:
:
ImageFileWriterWriterType;
//用New()函数并把结果赋值给一个itk:
:
SmartPointer来创建每个类型的对象
ReaderType:
:
Pointerreader=ReaderType:
:
New();
WriterType:
:
Pointerwriter=WriterType:
:
New();
//被读或写的文件名用SetFileName()函数传递
reader->SetFileName("D:
\\1.jpg");
writer->SetFileName("D:
\\itk\\showpic\\2.jpg");
//由于Reader的输出并未连接到其他的滤镜,所以在目前的例子中我们必须精确//地调用//Updata()方法。
//对Reader调用更新:
reader->Update();
//直接传递reader的输出给writer的输入来创建一个短数据通道:
writer->SetInput(reader->GetOutput());
//数据通道的执行被最后对象的Update()触发。
在这个情况下,最终的数据通道对象是writer。
在通道被执行时,最明智的自我保护程序的做法是在一个try/catch模块中插入Update()以抛出异常。
try
{
writer->Update();
}
catch(itk:
:
ExceptionObject&err)
{
std:
:
cerr<<"ExceptionObjectcaught!
"<:
endl;
std:
:
cerr<:
endl;
returnEXIT_FAILURE;
}
return0;
}
3、用CMAKE进行配置编译
打开cmake软件
Whereisthesourcecode:
(源文件路径):
D:
/ITK/showpic/showpic
Wheretobuildthebinaries:
(生成文件存放路径):
D:
/ITK/showpic/showpic-bin
点击后状态如下图
接着,显示第一次配置完成,但上面部分为红色,应该继续点击configure,直到红色部分变白
再次点击之后效果:
接着,点击旁边的:
Generate生成
4、在编译器visualstdio2010中进行编译
首先,找到showpic-bin目录,里面已经生成了工程项目,打开它,找到
SHOWPIC.sln文件(工程文件),双击打开
进入了vs10界面
5、查看结果:
首先,源程序(showpic.cxx)中的reader->SetFileName(“D:
\\1.jgp”);(查看该段代码)
图片1.jgp就存放在D盘目录下,如图所示
读入和输出之后的图片名2.jpg,则存放在:
D:
\ITK\showpic
对比效果:
6、遇到问题分析:
(1)在cmake编译过程中可能会报错,一般都是CMakeLists.txt文件没有配置好,字母写错或不应该小写(cmake命令)。
如果解决不了,重新进行编译,不过要先将showpic-bin(生成文件夹目录)里面的东西都删除掉,然后在进行编译,否则编译还是会报错。
(2)还有一个报错”打开不了itkImage.h文件
如下所示
这个错误也是由CMakeLists.txt文件没有配置好,理由基本同上。
交流:
1136958892