您的位置:首页 > 编程语言 > Qt开发

VTK笔记20160726(2)

2016-07-26 09:17 435 查看
vtkImageActor接收的图像数据vtkImageData像素类型必须为unsigned char,类型不符必须先转换。设置透明度的函数SetOpacity();遍历图像像素
vtkSmartPointer<vtkBMPReader> reader = vtkSmartPointer<vtkBMPReader>::New();
reader->SetFileName(argv[1]);
reader->Update();

int dims[3];
reader->GetOutput()->GetDimensions(dims);
//获取像素元组组分,就是一个像素点用几个数来表示,RGB就有三个数来表示一个像素
int nbOfComp;
nbOfComp = reader->GetOutput()->GetNumberOfScalarComponents();

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<100 && j<100)
{
unsigned char * pixel =
(unsigned char *) ( reader->GetOutput()->GetScalarPointer(i, j, k) );
*pixel = 0;
*(pixel+1) = 0;
*(pixel+2) = 0;
}
}
}
}
将像素值数组的头指针类型转换为unsigned char*迭代器方法:
reader->SetFileName ( argv[1] );
reader->Update();

int subRegion[6] = {0,300, 0, 300, 0, 0};//x,y,z起始终止范围,二维图像没Z
vtkImageIterator<unsigned char> it(reader->GetOutput(), subRegion);

while(!it.IsAtEnd())
{
unsigned char *inSI = it.BeginSpan();//当前像素元组
unsigned char *inSIEnd = it.EndSpan();

while(inSI != inSIEnd)
{
*inSI = 255-*inSI;
++inSI;
}
it.NextSpan();
}
感兴趣区域提取reader->SetFileName (argv[1]);reader->Update();int dims[3];reader->GetOutput()->GetDimensions(dims);vtkSmartPointer<vtkExtractVOI> extractVOI =vtkSmartPointer<vtkExtractVOI>::New();extractVOI->SetInputConnection(reader->GetOutputPort());
//6个参数,XYZextractVOI->SetVOI(dims[0]/4.,3.*dims[0]/4.,dims[1]/4.,3.*dims[1]/4., 0, 0);extractVOI->Update();vtkSmartPointer<vtkImageActor> originalActor =vtkSmartPointer<vtkImageActor>::New();originalActor->SetInput(reader->GetOutput());vtkSmartPointer<vtkImageActor> voiActor =vtkSmartPointer<vtkImageActor>::New();voiActor->SetInput(extractVOI->GetOutput());
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  itk vtk qt5