一、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图像读写的更多相关文章

  1. 三、ITK的dcm图像读写

    一.主要功能 1.读取单张dcm图像 2.写入单张dcm图像 3.图像调整之后以.jpg格式写入 4.调整之后重新以.dcm格式写入 二.代码 #include "itkImageFileR ...

  2. [python-opencv]图像二值化【图像阈值】

    图像二值化[图像阈值]简介: 如果灰度图像的像素值大于阈值,则为其分配一个值(可以是白色255),否则为其分配另一个值(可以是黑色0) 图像二值化就是将灰度图像上的像素值设置为0或255,也就是将整个 ...

  3. 旋转图像 给定一个 n × n 的二维矩阵表示一个图像。

    给定一个 n × n 的二维矩阵表示一个图像. 将图像顺时针旋转 90 度. 说明: 你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵.请不要使用另一个矩阵来旋转图像. 示例 : 给定 ma ...

  4. 十二、ITK例程-医疗图像配准的HelloWorld程序

    一.说明 医疗图像配准是ITK的一个重要内容,而我们今天想要说的一个程序则相当于是其中的HelloWorld程序. 程序源码位置: InsightToolkit-\Examples\Registrat ...

  5. C# Emgu CV学习笔记二之图像读写的两种方法

    http://blog.csdn.net/marvinhong/article/details/6800450 图像显示在控件loadPictureBox上 方法一 //读取图像001.jpg Int ...

  6. Java开发笔记(一百二十三)AWT图像视图

    前面介绍了AWT的几种基础控件,从按钮到文本标签,从输入框到选择框,无一例外都能显示文字,唯独无法显示某张图片文件.本以为AWT会提供专门的控件来显示图片,然而偏偏没有意料之中的图像控件,这可真是弱爆 ...

  7. CRM 2013 系统设置新功能二:Entity images 图像字段

    CRM2013系统默认的许多实体都已经有了图像的选择,如 右上角可以设置当前用户的头像. 客户.联系人等都可以,下面将介绍一下此项新功能: 一.实体中新建图像字段,其中系统自动命名entityinag ...

  8. opencv 批量图像读写

    处理图像数据集时通常要读写整个文件夹里的图像,这时就会用的图像的批量读写. 比较常用的方法就是生成一个包含所有图像的txt列表 生成txt文件的方法如下: 利用cmd进入dos 利用路径进入指定文件夹 ...

  9. 从零开发分布式数据库中间件 二、构建MyBatis的读写分离数据库中间件

    在上一节 从零开发分布式数据库中间件 一.读写分离的数据库中间件 中,我们讲了如何通过ThreadLocal来指定每次访问的数据源,并通过jdbc的连接方式来切换数据源,那么这一节我们使用我们常用的数 ...

随机推荐

  1. c++多个文件中共用一个全局变量 变量跨文件使用

    原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/12047602.html 虽然很多博客都写过这个了 但是 我还是继续补充的详细一点吧  毕竟很多 ...

  2. NET Framework项目移植到NET Core上遇到的一系列坑

    原文:NET Framework项目移植到NET Core上遇到的一系列坑 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https: ...

  3. 关于js的for in循环,慎用

    参考:http://www.cftea.com/c/2014/08/6290.asp作者:vkvi 如题我看到也有点诧异,测试了真的有这个问题,上代码 Array.prototype.a = func ...

  4. ES6中常用的小技巧,用了事半功倍哦

    ES6中常用的小技巧,如果能在实际项目中能使用到,必定事半功倍: 1. 强制要求参数 ES6提供了默认参数值机制,允许你为参数设置默认值,防止在函数被调用时没有传入这些参数. 在下面的例子中,我们写了 ...

  5. 12-Factor与微服务

           为了构建分布式微服务程序,能够部署到所有云服务,Heroku工程师总结所有云原生应用程序的12要素: 1.基准代码 Single codebase: The application mu ...

  6. "echo 0 /proc/sys/kernel/hung_task_timeout_secs" disable this message

    问题现象: 问题原因: 默认情况下, Linux会最多使用40%的可用内存作为文件系统缓存.当超过这个阈值后,文件系统会把将缓存中的内存全部写入磁盘, 导致后续的IO请求都是同步的. 将缓存写入磁盘时 ...

  7. center----Iframe 用法的详细讲解

    把iframe解释成“浏览器中的浏览器“很是恰当 <iframe frameborder=0 width=170 height=100 marginheight=0 marginwidth=0 ...

  8. appium元素定位之AndroidUiAutomator

    UIAutomator 元素定位是 Android 系统原生支持的定位方式,虽然与 xpath 类似,但比它更好用,并且支持元素全部的属性定位,定位原理是通过 android 自带的android u ...

  9. 一文了解 Consistent Hash

    本文首发于 vivo互联网技术 微信公众号 链接:https://mp.weixin.qq.com/s/LGLqEOlGExKob8xEXXWckQ作者:钱幸川 在分布式环境下面,我们经常会通过一定的 ...

  10. 【ST开发板评测】使用Python来开发STM32F411

    前言 板子申请了也有一段时间了,也快到评测截止时间了,想着做点有意思的东西,正好前一段时间看到过可以在MCU上移植MicroPython的示例,就自己尝试一下,记录移植过程. MicroPython是 ...