搜档网
当前位置:搜档网 › 使用itk编程实例详解

使用itk编程实例详解

使用itk编程实例详解
使用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命令会清理变量原来的值;

https://www.sodocs.net/doc/cd17722005.html,mand (args ...) #命令不分大小写,参数使用空格分隔,使用双引号引起参数中

空格

4.set(var a;b;c) <=> set(var a b c) #定义变量var并赋值为a;b;c这样一个string list

5.Add_executable(${var}) <=> Add_executable(a b c) #变量使用${xxx}引用

6.条件语句:

if(var) #var 非empty 0 N No OFF FALSE... #非运算使用NOT

else()/elseif() … endif(var)

7.循环语句

Set(VAR a b c)

Foreach(f ${VAR}) …Endforeach(f)

8.循环语句

WHILE() … ENDWHILE()

Cmake命令:

链接来源:https://www.sodocs.net/doc/cd17722005.html,/netnote/article/details/4051620

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(HELLO hello.cxx ) #将hello.cxx编译成可执行文件

CMakeLists.txt (cmake配置文件)

#注明cmake最低版本要求,不写会报错或警告

cmake_minimum_required(VERSION 2.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(SHOWPIC showpic.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"

int main( int , char * argv[])

{

//通过指定表示图像的像素和维数的值来定义图像的类型。

typedef unsigned char PixelType;

const unsigned int Dimension = 2;

typedef itk::Image< PixelType, Dimension > ImageType;

//以reader 和writer的类型为例,这两个类通过图像类型被参数化:

typedef itk::ImageFileReader< ImageType > ReaderType;

typedef itk::ImageFileWriter< ImageType > WriterType;

//用New( ) 函数并把结果赋值给一个itk::SmartPointer 来创建每个类型的对象

ReaderType::Pointer reader = ReaderType::New();

WriterType::Pointer writer = 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 << "ExceptionObject caught !" << std::endl; std::cerr << err << std::endl;

return EXIT_FAILURE;

}

return 0;

}

3、用CMAKE进行配置编译

打开cmake软件

Where is the source code:(源文件路径):D:/ITK/showpic/showpic

Where to build the binaries:(生成文件存放路径):D:/ITK/showpic/showpic-bin

点击后状态如下图

接着,显示第一次配置完成,但上面部分为红色,应该继续点击configure,直到红色部分变白

再次点击之后效果:

接着,点击旁边的:Generate 生成

4、在编译器visual stdio 2010中进行编译

首先,找到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文件

如下所示

交流:1136958892

相关主题