vtk获取内存中图像数据

原文链接:http://blog.csdn.net/zmy3376365/article/details/7717721

内存中有段图片数据  ,使用VTK来读入,然后就可以通过getoutputport() /getoutput()来获取了

vtkImageImport *importer = vtkImageImport::New();
importer->SetWholeExtent( 0, m_image->width-1, 0, m_image->height-1, 0, 0 );
importer->SetDataExtentToWholeExtent();
importer->SetDataScalarTypeToUnsignedChar();
importer->SetNumberOfScalarComponents(m_image->depth);
importer->SetImportVoidPointer(m_image->data);
// importer->Update();

vtk读取dat 、raw等文件,不过文件后缀必须加上.1什么的

vtkVolume16Reader *v16 = vtkVolume16Reader::New();
v16->SetDataDimensions(640, 480); //图像大小
v16->SetDataByteOrderToLittleEndian();
v16->SetFilePrefix("./0.dat");
v16->SetImageRange(1, 1);
v16->SetDataSpacing(1.0, 1.0, 1.0); vtkImageResample *sample = vtkImageResample::New();
sample->SetInput((vtkDataObject*)v16->GetOutput());
sample->SetAxisMagnificationFactor(0, 1.2);
sample->SetAxisMagnificationFactor(1, 1.2); vtkRenderWindowInteractor *iren = vtkRenderWindowInteractor::New();
vtkImageViewer *viewer = vtkImageViewer::New();
viewer->SetupInteractor(iren);
viewer->SetInput(sample->GetOutput());

VTKRenderer显示图片进行更新切换:

先removeActor

然后addActor

最后Render()

VTK读取序列化图像

原文链接:http://blog.csdn.net/www_doling_net/article/details/8896598

这个更给力了!!

医学图像处理的应用程序中,经常会碰到读取一个序列图像的操作。比如CT、MR等所成的图像都是一个切面一个切面地存储的,医学图像处理程序要处理这些数据,第一步当然是把这些数据从磁盘等外部存储介质中导入内存。

利用VTK可以读取多种格式的图像文件,支持读取单个的二维图像(比如*.BMP、*.JPEG、*.PNG等)或者三维图像文件(*.VTK、*.mhd、*.mha等),也支持序列图像文件的导入。下面我们详细地讲解如何在VTK里实现序列图像文件的读取(我们以美国可视人的数据做为测试数据,数据可以从这里下载到)。

在讲解VTK序列图像读取之前,有一个问题需要注意的:就是待读取的序列图像的文件名必须是规则的,比如像下图所示的。

Tips:涉及到指改文件名的,如果熟悉Dos命令的,直接用rename命令就可以完成;或者是使用一个小软件Renamer来修改。

图1序列图像的命名示例

方法一:使用SetFileNames()方法读取序列图像。

    //生成图像序列的文件名数组
vtkSmartPointer<vtkStringArray > fileArray =
vtkSmartPointer<vtkStringArray >::New();
charfileName[128];
for(inti = 1; i < 20; i++) //几个图像就循环几次
{
sprintf(fileName,"../VisibleWomanHead/VisibleWomanHead_%02d.jpg", i);
vtkstd::stringfileStr(fileName);
fileArray->InsertNextValue(fileStr);
}
//读取JPG序列图像
vtkSmartPointer<vtkJPEGReader>reader =
vtkSmartPointer<vtkJPEGReader>::New();
reader->SetFileNames(fileArray);
reader->Update();

说明:要读取的序列文件是存放在文件夹VisibleWomanHead里的,而且每个图像的命名规则是:VisibleWomanHead_01.jpg,VisibleWomanHead_02.jpg……如图1所示。方法一我们使用了vtkStringArray先构建一个包含要读取的序列图像文件的文件名数组,然后调用vtkJPEGReader里的SetFileNames()方法。方法SetFileNames()是在类vtkImageReader2里实现的,所以大部分VTK图像的读取类都可以用这种方法来读取序列图像文件。

方法二:使用SetFilePrefix()/SetFilePattern()方法读取序列图像。

前面我们已经提过,在读取序列图像文件时,要求序列里的文件名有规律地命名(如图1),既然这些文件名有规律,我们可以采用vtkImageReader2里的方法SetFilePrefix()/SetFilePattern()来读取序列图像。

    vtkSmartPointer<vtkJPEGReader>reader =
vtkSmartPointer<vtkJPEGReader>::New();
reader->SetFilePrefix ("D:/Data/VisibleWomanHead/VisibleWomanHead_");
reader->SetFilePattern("%s%02d.jpg");
reader ->SetDataExtent (0,511,0,511,1,20);//图像大小是512*512
reader->Update();

至于为什么这么写,你们感受一下就知道了,特别是SetFilePrefix()、SetFilePattern()、SetDataExtent()这几个函数的参数。

方法二:一张一张地读入,然后合并成一个三维的数据体。

    vtkSmartPointer<vtkImageAppend > append =
vtkSmartPointer<vtkImageAppend >::New();
append->SetAppendAxis(2); vtkSmartPointer<vtkJPEGReader>reader =
vtkSmartPointer<vtkJPEGReader>::New();
char fileName[128];
for(int i = 1; i < 21; i++)
{
sprintf(fileName,"D:/Data/VisibleWomanHead/VisibleWomanHead_%02d.jpg", i);
reader->SetFileName(fileName);
append->AddInputConnection(reader->GetOutputPort());
}

我们使用类vtkImageAppend做合并的操作,其中方法SetAppendAxis(2)是指定Z轴为读入的每层图像数据的堆叠方向。其他的代码你们继续感受一下,就不再叙述了。

==========欢迎转载,转载时请保留该声明信息==========

版权归@东灵工作室所有,更多信息请访问东灵工作室

教程系列导航:http://blog.csdn.net/www_doling_net/article/details/8763686

VTK读取序列化图像的更多相关文章

  1. Vtk读取并显示保存图像

    (1):Vtk读取并显示图像:三种方法 转载:未知出处 转载:用VTK显示平面图片:http://blog.csdn.net/tonylk/article/details/464881 用到vtkJP ...

  2. 使用C#版本GDAL读取复数图像

    GDAL的C#版本虽然在很多算法接口没有导出,但是在读写数据中的接口基本上都是完全导出了.使用ReadRaster和WriteRaster方法来进行读写,同时对这两个方法进行了重载,对于常用的数据类型 ...

  3. OpenCV imread读取jpg图像的一个大坑

    长话短说 版本区间[OpenCV3.0.0, OpenCV3.4.1]内的OpenCV,(至少在windows下,使用官方提供的预编译版本),imread读取jpg图片后的像素值,和版本区间[Open ...

  4. ArcGIS二次开发之读取遥感图像像素值的做法

    作者:朱金灿 来源:http://blog.csdn.net/clever101 首先是读取遥感图像的R.G.B波段数据的做法.读取R.G.B波段数据的像素值主要通过IRaster接口的Read方法在 ...

  5. Halcon一日一练:读取文件目录图像的三种方法

    第一种方法: 读了一个单一图像: read_image(Image,'fabrik') 这种方式可以快速的读取软件自身携带的库图像文件,系统设定了库图像映像文件的快速读取方式,我们也可以通过绝对地址的 ...

  6. vtk读取文件中点坐标[转]

    vtk基础编程(2)-读取数据文件中的坐标点 1. 案例说明 在实际计算中,常常需要大量的数据, 这个时候数据文件就必不可少, 例如 数据文件points.dat, 中存放了三个点的坐标, 0.0 0 ...

  7. 从二进制数据流中构造GDAL可以读取的图像数据

    在很多时候,我们的图像数据往往都不是文件方式存储在磁盘上,而是可能从网络或者数据库中获取的是二进制的图像数据流.最简单的方式和最容易想到的方式就是将这个文件流保存到磁盘上形成一个文件,然后再使用GDA ...

  8. 读取BMP图像size的时候与操作和左移的原因

    在读取一个bmp图像的时候,我们会将它的大小读取出来,如果还不清楚bmp的文件结构,那就先看一下这篇博客. 看完我将假设你已经明白所表示的意义.那么,对于bfSize, 它的表示数字为 50 00 0 ...

  9. VTK三维重建(1)-使用VTK读取DICOM,并动态输出

    [效果显示] 将脚部骨骼扫描的CT照片进行的连续读取, 运行结果存为了两个动态gif, 不知道能不能正常显示 [程序实现] int main(int argc, char* argv[]) { // ...

随机推荐

  1. windows开机自启动bat脚本设置

    群里有朋友问到windows下如何设计开机自启动的脚本,一般而言小鱼大多还是在linux环境下运维,windows的bat了解的很少,windows运行机制也不是特别了解,不过既然朋友问到这个问题,虽 ...

  2. 配置Master与Slave实现主从同步

    Mysql版本 通过docker启动的mysql容器 mysql版本 root@1651d1cab219:/# mysql --version mysql Ver 14.14 Distrib 5.6. ...

  3. http://www.phplo.com/special/2013/0616/467.html

    http://www.phplo.com/special/2013/0616/467.html

  4. BZOJ 4567 [SCOI2016]背单词 (Trie树、贪心)

    题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=4567 题解: 显然答案一定小于\(n\times n\), 字符串倒过来变成前缀建Tr ...

  5. [下载]Oracle LOB字段编辑工具

    OraLobEditor 是Oracle LOB (CLOB, BLOB) 字段编辑工具. 查看.编辑LOB (CLOB, BLOB)字段(plain text, RTF, image, hex, h ...

  6. 执行计划中Using filesort,Using temporary相关语句的优化解决

    昨天听开发人员提到,相关的彩票网页当中一个页面刷新的很慢,特别是在提取数据的时候,今天早上一到,便去找开发人员要去相关的也没进行浏览,窥探哪些数据出现了问题,开发人员使用PHP开发,所以我用IE很容易 ...

  7. 解决ubuntu下wordpress设置固定链接后文章无法打开

    1.首先查看是否开启了Apache的rewrite功能,新建一个phpinfo的php文档 <?php phpinfo(); ?> 保存为info.php文件 放在www目录下并用浏览器打 ...

  8. BZOJ 1455 罗马游戏 左偏树

    题目大意:给定n个点,每一个点有一个权值,提供两种操作: 1.将两个点所在集合合并 2.将一个点所在集合的最小的点删除并输出权值 非常裸的可并堆 n<=100W 启示式合并不用想了 左偏树就是快 ...

  9. QT官方下载地址

    http://download.qt.io/official_releases watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/ ...

  10. GIT 源码管理-简介

    关于GIT GIT 是一个分布式版本控制软件,最初由林纳斯·托瓦兹(Linus Torvalds)创作,于2005年以GPL发布.最初目的是为更好地管理Linux内核开发而设计.是目前世界上最先进的分 ...