1.三张灰度图像合成彩色图

我们可以提取彩色的图像的各个颜色分量,那么同样也可以将灰度图像合并成为一个彩色图像。VTK中提供vtkImageAppendComponents类来合成彩色图像,其输入需要提供三个灰度图像。
下面实例:
#include <vtkAutoInit.h>
VTK_MODULE_INIT(vtkRenderingOpenGL);#include <vtkSmartPointer.h>
#include <vtkImageCanvasSource2D.h>
#include <vtkImageAppendComponents.h>
#include <vtkImageActor.h>
#include <vtkRenderer.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkInteractorStyleImage.h>int main()
{vtkSmartPointer<vtkImageCanvasSource2D> red =vtkSmartPointer<vtkImageCanvasSource2D>::New();red->SetScalarTypeToUnsignedChar();red->SetNumberOfScalarComponents(1);red->SetExtent(0, 100, 0, 100, 0, 0);red->SetDrawColor(0, 0, 0, 0);red->FillBox(0, 100, 0, 100);red->SetDrawColor(255, 0, 0, 0);red->FillBox(20, 40, 20, 40);red->Update();vtkSmartPointer<vtkImageCanvasSource2D> green =vtkSmartPointer<vtkImageCanvasSource2D>::New();green->SetScalarTypeToUnsignedChar();green->SetNumberOfScalarComponents(1);green->SetExtent(0, 100, 0, 100, 0, 0);green->SetDrawColor(0, 0, 0, 0);green->FillBox(0, 100, 0, 100);green->SetDrawColor(255, 0, 0, 0);green->FillBox(30, 50, 30, 50);green->Update();vtkSmartPointer<vtkImageCanvasSource2D> blue =vtkSmartPointer<vtkImageCanvasSource2D>::New();blue->SetScalarTypeToUnsignedChar();blue->SetNumberOfScalarComponents(1);blue->SetExtent(0, 100, 0, 100, 0, 0);blue->SetDrawColor(0, 0, 0, 0);blue->FillBox(0, 100, 0, 100);blue->SetDrawColor(255, 0, 0, 0);blue->FillBox(40, 60, 40, 60);blue->Update();vtkSmartPointer<vtkImageAppendComponents> appendFilter =vtkSmartPointer<vtkImageAppendComponents>::New();appendFilter->SetInputConnection(0, red->GetOutputPort());appendFilter->AddInputConnection(0, green->GetOutputPort());appendFilter->AddInputConnection(0, blue->GetOutputPort());appendFilter->Update();vtkSmartPointer<vtkImageActor> redActor =vtkSmartPointer<vtkImageActor>::New();redActor->SetInputData(red->GetOutput());vtkSmartPointer<vtkImageActor> greenActor =vtkSmartPointer<vtkImageActor>::New();greenActor->SetInputData(green->GetOutput());vtkSmartPointer<vtkImageActor> blueActor =vtkSmartPointer<vtkImageActor>::New();blueActor->SetInputData(blue->GetOutput());vtkSmartPointer<vtkImageActor> combinedActor =vtkSmartPointer<vtkImageActor>::New();combinedActor->SetInputData(appendFilter->GetOutput());// Define viewport ranges// (xmin, ymin, xmax, ymax)double redViewport[4] = { 0.0, 0.0, 0.25, 1.0 };double greenViewport[4] = { 0.25, 0.0, 0.5, 1.0 };double blueViewport[4] = { 0.5, 0.0, 0.75, 1.0 };double combinedViewport[4] = { 0.75, 0.0, 1.0, 1.0 };// Setup renderersvtkSmartPointer<vtkRenderer> redRenderer =vtkSmartPointer<vtkRenderer>::New();redRenderer->SetViewport(redViewport);redRenderer->AddActor(redActor);redRenderer->ResetCamera();redRenderer->SetBackground(1.0, 1.0, 1.0);vtkSmartPointer<vtkRenderer> greenRenderer =vtkSmartPointer<vtkRenderer>::New();greenRenderer->SetViewport(greenViewport);greenRenderer->AddActor(greenActor);greenRenderer->ResetCamera();greenRenderer->SetBackground(1.0, 1.0, 1.0);vtkSmartPointer<vtkRenderer> blueRenderer =vtkSmartPointer<vtkRenderer>::New();blueRenderer->SetViewport(blueViewport);blueRenderer->AddActor(blueActor);blueRenderer->ResetCamera();blueRenderer->SetBackground(1.0, 1.0, 1.0);vtkSmartPointer<vtkRenderer> combinedRenderer =vtkSmartPointer<vtkRenderer>::New();combinedRenderer->SetViewport(combinedViewport);combinedRenderer->AddActor(combinedActor);combinedRenderer->ResetCamera();combinedRenderer->SetBackground(1.0, 1.0, 1.0);vtkSmartPointer<vtkRenderWindow> renderWindow =vtkSmartPointer<vtkRenderWindow>::New();renderWindow->AddRenderer(redRenderer);renderWindow->AddRenderer(greenRenderer);renderWindow->AddRenderer(blueRenderer);renderWindow->AddRenderer(combinedRenderer);renderWindow->SetSize(1200, 300);renderWindow->Render();renderWindow->SetWindowName("ImageAppendComponentsExample");vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor =vtkSmartPointer<vtkRenderWindowInteractor>::New();vtkSmartPointer<vtkInteractorStyleImage> style =vtkSmartPointer<vtkInteractorStyleImage>::New();renderWindowInteractor->SetInteractorStyle(style);renderWindowInteractor->SetRenderWindow(renderWindow);renderWindowInteractor->Initialize();renderWindowInteractor->Start();return 0;
}

输出结果:

2.参看资料

1.《C++ primer》
2.《The VTK User’s Guide – 11thEdition》
3.《The Visualization Toolkit – AnObject-Oriented Approach To 3D Graphics (4th Edition)》
4.  张晓东, 罗火灵. VTK图形图像开发进阶[M]. 机械工业出版社, 2015.

VTK修炼之道24:图像基本操作_单颜色通道图像合成彩色相关推荐

  1. VTK修炼之道14:图像处理_创建

    1.引言:图像数据结构 数字图像文件内容由两个部分组成:图像头信息和数据.图像头信息定义了图像的基本信息,主要包括起点位置(Origin),像素间隔(space)和维数(dimension).通过这三 ...

  2. VTK修炼之道32:边缘检测_梯度算子

    1.梯度算子提取图像边缘 图像中不连续的灰度值会产生边缘,图像的边缘检测是基于边界的图像分割方法,如分水岭算法,通常是分割原图的梯度图像,梯度实际上也是反应的图像边缘信息.图像边缘一般常用图像一阶导数 ...

  3. VTK修炼之道16:图像处理_窗口分割和图像融合(ViewportvtkImageBlend)

    1.前言 前面演示的例子都是在一个窗口中显示一个图像.但是在常见的图像处理软件中,经常会遇到在一个窗口中显示多个图像,这就会用到图像融合技术.图像融合利用图像的alpha通道和不透明度来实现.VTK中 ...

  4. VTK修炼之道62:体绘制_固定点光线投影体绘制与GPU加速光线投影体绘制

    1.固定点光线投影算法 vtkFixedPointVolumeRayCastMapper是一个较好的vtkVolumeRayCastMapper的替代者.该类能够实现基于Alpha合成的体绘制方法和最 ...

  5. VTK修炼之道61:体绘制_光线投影+最大密度投影+等值面法

    1.vtkVolumeMapper vtkVolumeMapper是所有体绘制Mapper类的虚基类,提供接口函数,并由其子类实现具体功能.该类的继承关系如下图所示: 应该掌握一些常用的体绘制类. 2 ...

  6. VTK修炼之道60:体绘制_体绘制管线图形渲染管线

    1.几何渲染与体绘制 1.1 几何渲染 前面练习的渲染技术都是几何渲染技术.所谓的几何渲染技术,就是通过绘制几何图元(顶点.线段.面片等)来渲染数据,例如:绘制图像需要在空间中建立一个四边形图元,然后 ...

  7. VTK修炼之道39:图像平滑_各向异性滤波

    1.各向异性扩散滤波 高斯平滑方法在平滑噪声的同时,模糊了图像的重要边缘图像. 各向异性滤波是一种基于偏微分方程的滤波技术,建立于热量的各向异性扩散理论. 各向异性滤波在图像的平坦区域选择大尺度平滑, ...

  8. VTK修炼之道38:图像平滑_中值滤波器

    1.中值滤波 vtkImageHybridMedian2D实现了对二维图像的中值滤波.其实现原理是,采用一个5x5的模板,逐次将模板中心对应于图像的每个像素上,将模板图像覆盖的像素的中值作为当前像素的 ...

  9. VTK修炼之道37:图像平滑_高斯滤波器

    1.高斯滤波 高斯平滑的原理类似于均值滤波.均值滤波模板的系数都是一样的,而高斯平滑则是需要根据像素与模板中心的距离来定义权重.权重的计算方法是采用高斯分布,离中心越远,权重越小. 下面是一个利用Ga ...

最新文章

  1. ZooKeeper和CAP理论及一致性原则
  2. 关于现在人工智能预测的一些冷水
  3. Delegate和Command Pattern
  4. Set_uid set_gid stick_bit 软链接 硬链接
  5. 执行多条SQL语句,执行数据库事务(可传入Sql参数)
  6. SQLite关于时间段查询的sql
  7. 徐雷FrankXu 内推 杭州 蚂蚁金服招聘 java开发工程
  8. 禁售苹果手机_苹果、华为供应商工厂突发火灾!浓烟冲天
  9. Visual Studio 2015正式企业(Enterprise)版
  10. Java Scala获取所有注解的类信息
  11. blob clob区别
  12. 计算机硬盘驱动器越大,计算机硬盘驱动器的使用寿命是多少
  13. yaml与json的对比
  14. c语言memset函数作用,详解C语言中的memset()函数
  15. flash mx拖拽实例_Flash MX 2004中的像素溶解效果
  16. 注册表知识与技巧大全
  17. moodle重定向_用最简单的pythonGUI库PysimpleGUI 设计一款中丹学院Moodle课件下载器。...
  18. 单片机牛人的学习经历
  19. pip 下载安装时使用清华大学镜像(各种国内源配置)
  20. [MySQL]学习笔记目录(尚硅谷宋红康MySQL数据库教程)

热门文章

  1. 2013ACM暑假集训总结-致将走上大三征途的我
  2. 关于表达式i+++i+++i++有感
  3. ”System.Configuration.ConfigurationSettings.AppSettings“ 已过时----解决方案
  4. NYOJ 648 数字1的数量
  5. css实现超出文本溢出用省略号代替
  6. ASP.NET页面刷新的几种实现方法
  7. 洛谷P2158仪仗队(数学,观察找规律,欧拉函数)
  8. Hyperopt中文文档导读
  9. spark on mesos 两种运行模式
  10. oracle 存储过程和函数例子