二、ITK例子-jpg图像读写
一、ITK的读写工作原理
在ITK里面,我们需要设置读取图像的像素类型,图像类型。
然后设置读取指针,将读取参数传入。
同时设置写指针,也将写入文件参数传入。
为了实现读写动作,我们需要构造一个IO工厂(IOFactory),用来实现读写的动作。
同时需要一个动作,用来触发上面设置的内容,使得一切开始工作。
这就好比是一台机器,我们并不知道机器内部是如何运行的(factory的工作机制),但是我们可以设置自己知道的参数,然后点击开始开关,
这个时候机器就能够正常运行,达到我们想要的效果。(这个其实也是API的含义所在)。
二、下面是对于读写机制的讲解

首先我们在右侧设置了ImageFileWriter 和ImageFileReader, 告诉函数我们需要操作的目标文件名。
然后factory创建ImageIO.
通过ImageIOFactory判断里面的哪一个工人可以对于这个文件进行读写操作。
比如说这个时候我们查找到了PNGImageIOFactory(确定的工人)可以对于目标文件进行读写操作,一个PNGImageIOFactory 就在内存中创建,作为ImageIOFactory的操作者,就把数据交给它来进行操作的,完成相应的读写操作。
工作就完成了。
这个机制就相当于供需平台一样:
一个人(wirter 或者 reader指针)把自己的需求,比如说修电器发布出来,然后有能力修电器的人接单(可以完成write或者read),然后登记(register),以公司名义(ImageIOFactory)完成相应的操作,结束工作。
一些ImageIO工厂如下:

三、例子
具体的工程构建方法参见博客一
代码如下:
#include "itkRGBPixel.h"
#include "itkImage.h"
#include "itkImageFileReader.h"
#include "itkImageFileWriter.h"
#include "itkJPEGImageIOFactory.h"
int main(void)
{
//这里读取的时候是以RGBPixel的形式读取的,如果修改为如下,则是以灰度图读取的
//using PixelType =itk::RGBPixel<unsigned char>;
using PixelType=unsigned char;
using ImageType=itk::Image<PixelType, >; using ReaderType =itk::ImageFileReader<ImageType>;
using WriterType=itk::ImageFileWriter<ImageType>;
ReaderType::Pointer reader = ReaderType::New();
WriterType::Pointer writer = WriterType::New();
//如果写入的话需要有这一句定义
itk::JPEGImageIOFactory::RegisterOneFactory(); reader->SetFileName("1.jpg");
writer->SetFileName("2.jpg");
writer->SetInput(reader->GetOutput());
try
{
writer->Update();
}
catch (itk::ExceptionObject& err)
{
std::cerr << "ExceptionObject caught !" << std::endl;
std::cerr << err << std::endl;
return EXIT_FAILURE;
}
return EXIT_SUCCESS;
}
四、注意
4.1相应的函数的使用要添加头文件
4.2更新动作触发的时候,最好是采用如下的代码:
try
{
writer->Update();
}
catch (itk::ExceptionObject& err)
{
std::cerr << "ExceptionObject caught !" << std::endl;
std::cerr << err << std::endl;
return EXIT_FAILURE;
}
3、读取文件位于工程目录,在运行程序以后,得到了两个.jpg文件
五、参考文档
InsightSoftwareGuide-Book2-5.0.1.pdf
二、ITK例子-jpg图像读写的更多相关文章
- 三、ITK的dcm图像读写
一.主要功能 1.读取单张dcm图像 2.写入单张dcm图像 3.图像调整之后以.jpg格式写入 4.调整之后重新以.dcm格式写入 二.代码 #include "itkImageFileR ...
- [python-opencv]图像二值化【图像阈值】
图像二值化[图像阈值]简介: 如果灰度图像的像素值大于阈值,则为其分配一个值(可以是白色255),否则为其分配另一个值(可以是黑色0) 图像二值化就是将灰度图像上的像素值设置为0或255,也就是将整个 ...
- 旋转图像 给定一个 n × n 的二维矩阵表示一个图像。
给定一个 n × n 的二维矩阵表示一个图像. 将图像顺时针旋转 90 度. 说明: 你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵.请不要使用另一个矩阵来旋转图像. 示例 : 给定 ma ...
- 十二、ITK例程-医疗图像配准的HelloWorld程序
一.说明 医疗图像配准是ITK的一个重要内容,而我们今天想要说的一个程序则相当于是其中的HelloWorld程序. 程序源码位置: InsightToolkit-\Examples\Registrat ...
- C# Emgu CV学习笔记二之图像读写的两种方法
http://blog.csdn.net/marvinhong/article/details/6800450 图像显示在控件loadPictureBox上 方法一 //读取图像001.jpg Int ...
- Java开发笔记(一百二十三)AWT图像视图
前面介绍了AWT的几种基础控件,从按钮到文本标签,从输入框到选择框,无一例外都能显示文字,唯独无法显示某张图片文件.本以为AWT会提供专门的控件来显示图片,然而偏偏没有意料之中的图像控件,这可真是弱爆 ...
- CRM 2013 系统设置新功能二:Entity images 图像字段
CRM2013系统默认的许多实体都已经有了图像的选择,如 右上角可以设置当前用户的头像. 客户.联系人等都可以,下面将介绍一下此项新功能: 一.实体中新建图像字段,其中系统自动命名entityinag ...
- opencv 批量图像读写
处理图像数据集时通常要读写整个文件夹里的图像,这时就会用的图像的批量读写. 比较常用的方法就是生成一个包含所有图像的txt列表 生成txt文件的方法如下: 利用cmd进入dos 利用路径进入指定文件夹 ...
- 从零开发分布式数据库中间件 二、构建MyBatis的读写分离数据库中间件
在上一节 从零开发分布式数据库中间件 一.读写分离的数据库中间件 中,我们讲了如何通过ThreadLocal来指定每次访问的数据源,并通过jdbc的连接方式来切换数据源,那么这一节我们使用我们常用的数 ...
随机推荐
- pyhton的安装,环境变量的设置,pycharm的安装下载,中文汉化和字体的设置
1.下载pycharm https://www.7down.com/soft/336988.html 1.pycharm的汉化下载汉化包:resources_cn.jar 放到pycharm的安 ...
- 为什么学习Python?
互联网高速发展的今天,很荣幸能够接触计算机这个专业,成为一名程序猿小白,本科期间学习了C.C++.Java.Pthon.C#,每门语言都了解那么一点,学的很杂,刚好遇到大学毕业的这个暑期,在继续读研之 ...
- MySQL 排错-解决MySQL非聚合列未包含在GROUP BY子句报错问题
排错-解决MySQL非聚合列未包含在GROUP BY子句报错问题 By:授客 QQ:1033553122 测试环境 win10 MySQL 5.7 问题描述: 执行类似以下mysql查询, SEL ...
- console 有没有小伙伴跟我一样想知道这个对象呢
晚上看了会代码,没什么简单又好分享的 -0- 突然想到console这个对象,就把它打印了出来看看吧 ; for(var key in console){ i++; ){ document.write ...
- Kotlin版Aspect入门篇
介绍: AspectJ是一个面向切面编程的一个框架,它扩展了java语言,并定义了实现AOP的语法.在将.java文件编译为.class文件时默认使用javac编译工具,AspectJ会有一套符合ja ...
- 老师说的都对 - Beta阶段博客作业
第二小组Beta冲刺阶段博客目录 github 地址:PCES-Github 一.Scrum Meeting 1.第十周会议记录 2.第十一周会议记录 3.第十二周会议记录 二.测试报告 Beta阶段 ...
- 抖音短视频教程VIP培训课程(2019实时更新中)
抖音联盟,抖友会,抖音联盟会员,抖音联盟学员,抖音批量做号团队,工作室带队,联盟学员统一官网认证可查,统一变现渠道担保,成熟技术技术后盾,实时工作室真机实测规则,抖音情感励志书单模式2.0升级,拒绝落 ...
- python uiautomator2 watcher的使用方法
该方是基于uiautomator2如下版本进行验证的: PS C:\windows\system32> pip show uiautomator2 Name: uiautomator2 Vers ...
- python与数据库交互的模块pymysql
一.Mysql 1.前提 pip install pymysql import pymysql 2.详情 Connection对象 =====>用于连接数据库 用于建立与数据库的连接 创建对象: ...
- FTP安装及配置
在centos7安装ftp服务 yum install -y vsftpd 启动服务 systemctl start vsftpd 自启动 systemctl enable vsftpd 查看端口 注 ...