VTK读取TIFF格式图片,获取像素值,显示图片

/*
 *Vtk_ReadTiff.cpp
 *VTK读取TIFF格式图片,修改像素值,显示图片
 *2017-11-13
 */

#include <vtkSmartPointer.h>
#include <vtkImageViewer2.h>
#include <vtkTIFFReader.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkRenderer.h>
#include "vtkImageReader2.h"  
#include "vtkImageReslice.h"  
#include "vtkWindowLevelLookupTable.h"  
#include "vtkImageMapToColors.h"  
#include "vtkImageActor.h"  
#include "vtkImageData.h"  

#include <stdio.h>
#include <iostream>
using namespace std;


int main(int argc, char* argv[])
{
	char* fileName = "/home/zlf/Documents/VTK/VTKCODE/VTK_READTIFF/earth.tif";
	vtkSmartPointer<vtkTIFFReader> reader = vtkSmartPointer<vtkTIFFReader>::New();

	reader->SetFileName(fileName);

	//加上这一句会报错 error: ‘class vtkImageData’ has no member named ‘UpdateInformation’
	//但是不加的话,图像信息不会被更新进来,用reader->Update();代替
	//reader->GetOutput()->UpdateInformation();

	reader->Update();

	//获取图像维数
	int dims[3];  
    	reader->GetOutput()->GetDimensions(dims);  

	cout<<"dims[0-3]: "<<dims[0]<<"   "<<dims[1]<<"   "<<dims[2]<<endl<<endl;

	int extent[6];  
	double spacing[3];  
	double origin[3];  
	reader->GetOutput()->GetExtent(extent);  
	reader->GetOutput()->GetSpacing(spacing);  
    	reader->GetOutput()->GetOrigin(origin);  
  
    	// 计算中心位置。  
	double center[3];  
	center[0] = origin[0] + spacing[0] * 0.5 * (extent[0] + extent[1]);   
	center[1] = origin[1] + spacing[1] * 0.5 * (extent[2] + extent[3]);   
	center[2] = origin[2] + spacing[2] * 0.5 * (extent[4] + extent[5]);   

	cout<<"坐标原点";
	cout<<"origin[0]: "<<origin[0]<<endl;	
	cout<<"origin[1]: "<<origin[1]<<endl;	
	cout<<"origin[2]: "<<origin[2]<<endl<<endl;

	cout<<"像素间隔";
	cout<<"spacing[0]: "<<spacing[0]<<endl;	
	cout<<"spacing[1]: "<<spacing[1]<<endl;	
	cout<<"spacing[2]: "<<spacing[2]<<endl<<endl;
	
	cout<<"第一维数据范围extent[0-1]: "<<extent[0]<<"  "<<extent[1]<<endl;
	cout<<"第二维数据范围extent[0-1]: "<<extent[2]<<"  "<<extent[3]<<endl;
	cout<<"第三维数据范围extent[0-1]: "<<extent[4]<<"  "<<extent[5]<<endl;

	cout<<"图片中间";
	cout<<"center[0]: "<<center[0]<<endl;	
	cout<<"center[1]: "<<center[0]<<endl;
	cout<<"center[2]: "<<center[0]<<endl<<endl;


	//打印原像素
	int p = 0;
	cout<<"[ red, green, blue ]"<<endl;
    	for (int k = 0; k < dims[2]; k++)
    	{
		for (int j = 0; j < dims[1]; j++)
		{
			for (int i = 0; i < dims[0]; i++)
			{
				if (i > 1500 && i < 1511 && j > 1500 && j < 1511)    //10 * 10个像素,图片中间
				{
					unsigned char *pixel = (unsigned char *)(reader->GetOutput()->GetScalarPointer(i, j, k));

					//无法直接cout unsigned char(范围: 0~255) 类型的变量,要转换成int型
					cout<<"[ "<<int( *pixel )<<", "<<int( *(pixel + 1) )<<", "<<int( *(pixel + 2) )<<"]   "; 
					p = p + 1;
					if( (p%5)==0 )	//每5个一换行
					{
						cout<<endl;
					}
				}
			}
		}
	}


	//修改原像素
	p = 0;
	for (int k = 0; k < dims[2]; k++)
	{
		for (int j = 0; j < dims[1]; j++)
		{
			for (int i = 0; i < dims[0]; i++)
			{
				if (i > 0 && i < 501 && j > 0 && j < 501)    //500 * 500个像素,图片左下角
				{
					unsigned char *pixel = (unsigned char *)(reader->GetOutput()->GetScalarPointer(i, j, k));
					*pixel = 255 ;			      //red分量: 新像素值改为255
					*(pixel + 1) = 255 - *(pixel + 1);    //green分量: 新像素值用255减去原来像素值
					*(pixel + 2) = 255 - *(pixel + 2);    //blue分量: 新像素值用255减去原来像素值
				}
			}
		}
	}

	///
	//显示图像
	///

	vtkSmartPointer<vtkImageViewer2> imageViewer = vtkSmartPointer<vtkImageViewer2>::New();

	imageViewer->SetInputConnection(reader->GetOutputPort());

	vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor = vtkSmartPointer<vtkRenderWindowInteractor>::New();

	imageViewer->SetupInteractor(renderWindowInteractor);

	imageViewer->Render();

	imageViewer->GetRenderer()->ResetCamera();

	imageViewer->Render();

	renderWindowInteractor->Start();

	return 0;
}


/

error: ‘class vtkImageData’ has no member named ‘UpdateInformation’


/

# CMakeList.txt
# 2017-11-13
 
CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
 
PROJECT( VTK_READTIFF )
 
FIND_PACKAGE( VTK REQUIRED )
 
INCLUDE( ${VTK_USE_FILE} )
 
ADD_EXECUTABLE( Vtk_ReadTiff_Install Vtk_ReadTiff.cpp)
 
TARGET_LINK_LIBRARIES( Vtk_ReadTiff_Install ${VTK_LIBRARIES} )

/

结果如下:

/





参考:http://blog.csdn.net/ljp1919/article/details/8763913

参考: http://blog.csdn.net/u012176176/article/details/51286116




  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值