1.灰度图像映射
vtkImageLuminance负责将一个RGB彩色图像转换为一个单组分的灰度图像。映射公式如下:
luminance = 0.3*R + 0.59*G + 0.11*B
该公式中,R为输入图像的第一分量(红色),G为第二分量(绿色),B为第三分量(蓝色)。这个计算结果计算一个RGB颜色的亮度。该类的使用也比较简单,用户无须设置参数,代码如下:
#include <vtkAutoInit.h>
VTK_MODULE_INIT(vtkRenderingOpenGL);
#include <vtkSmartPointer.h>
#include <vtkBMPReader.h>
#include <vtkImageLuminance.h>
#include <vtkImageActor.h>
#include <vtkRenderer.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkInteractorStyleImage.h>
int main()
{
vtkSmartPointer<vtkBMPReader> reader =
vtkSmartPointer<vtkBMPReader>::New();
reader->SetFileName("lena.bmp");
vtkSmartPointer<vtkImageLuminance> luminanceFilter =
vtkSmartPointer<vtkImageLuminance>::New();
luminanceFilter->SetInputConnection(reader->GetOutputPort());
luminanceFilter->Update();
//原始演员
vtkSmartPointer<vtkImageActor> origActor =
vtkSmartPointer<vtkImageActor>::New();
origActor->SetInputData(reader->GetOutput());
//灰度演员
vtkSmartPointer<vtkImageActor> shiftscaleActor =
vtkSmartPointer<vtkImageActor>::New();
shiftscaleActor->SetInputData(luminanceFilter->GetOutput());
double origView[4] = { 0.0, 0.0, 0.5, 1.0 };
double shiftscaleView[4] = { 0.5, 0.0, 1.0, 1.0 };
//原始演员化妆
vtkSmartPointer<vtkRenderer> origRender =
vtkSmartPointer<vtkRenderer>::New();
origRender->SetViewport(origView);
origRender->AddActor(origActor);
origRender->ResetCamera();
origRender->SetBackground(1.0, 1.0, 1.0);
//灰度演员化妆
vtkSmartPointer<vtkRenderer> shiftscaleRender =
vtkSmartPointer<vtkRenderer>::New();
shiftscaleRender->SetViewport(shiftscaleView);
shiftscaleRender->AddActor(shiftscaleActor);
shiftscaleRender->ResetCamera();
shiftscaleRender->SetBackground(1.0, 1.0, 1.0);
vtkSmartPointer<vtkRenderWindow> renderwindow =
vtkSmartPointer<vtkRenderWindow>::New();
renderwindow->AddRenderer(origRender);
renderwindow->AddRenderer(shiftscaleRender);
renderwindow->SetSize(720, 480);
renderwindow->Render();
renderwindow->SetWindowName("RGB to Gray");
vtkSmartPointer<vtkRenderWindowInteractor> rwi =
vtkSmartPointer<vtkRenderWindowInteractor>::New();
vtkSmartPointer<vtkInteractorStyleImage> style =
vtkSmartPointer<vtkInteractorStyleImage>::New();
rwi->SetInteractorStyle(style);
rwi->SetRenderWindow(renderwindow);
rwi->Initialize();
rwi->Start();
return 0;
}
2.彩色图像RGB成分提取
VTK中利用vtkImageExtractComponents可以方便的提取出彩色图像的各个颜色分量,该类的使用比较简单,只需要设置要提取的分量序号即可。下面代码说明了怎样提取彩色图像的某个颜色分量。
#include <vtkAutoInit.h>
VTK_MODULE_INIT(vtkRenderingOpenGL);
#include <vtkSmartPointer.h>
#include <vtkBMPReader.h>
#include <vtkImageExtractComponents.h>
#include <vtkImageActor.h>
#include <vtkRenderer.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkInteractorStyleImage.h>
int main()
{
vtkSmartPointer<vtkBMPReader> reader =
vtkSmartPointer<vtkBMPReader>::New();
reader->SetFileName("lena.bmp");
vtkSmartPointer<vtkImageExtractComponents> redComponent =
vtkSmartPointer<vtkImageExtractComponents>::New();
redComponent->SetInputConnection(reader->GetOutputPort());
redComponent->SetComponents(0);
redComponent->Update();
vtkSmartPointer<vtkImageExtractComponents> greenComponent =
vtkSmartPointer<vtkImageExtractComponents>::New();
greenComponent->SetInputConnection(reader->GetOutputPort());
greenComponent->SetComponents(1);
greenComponent->Update();
vtkSmartPointer<vtkImageExtractComponents> blueComponent =
vtkSmartPointer<vtkImageExtractComponents>::New();
blueComponent->SetInputConnection(reader->GetOutputPort());
blueComponent->SetComponents(2);
blueComponent->Update();
//创建演员
vtkSmartPointer<vtkImageActor> origActor =
vtkSmartPointer<vtkImageActor>::New();
origActor->SetInputData(reader->GetOutput());
vtkSmartPointer<vtkImageActor> redActor =
vtkSmartPointer<vtkImageActor>::New();
redActor->SetInputData(redComponent->GetOutput());
vtkSmartPointer<vtkImageActor> greenActor =
vtkSmartPointer<vtkImageActor>::New();
greenActor->SetInputData(greenComponent->GetOutput());
vtkSmartPointer<vtkImageActor> blueActor =
vtkSmartPointer<vtkImageActor>::New();
blueActor->SetInputData(blueComponent->GetOutput());
//定义窗口 并化妆
double origView[4] = { 0.0, 0.0, 0.25, 1.0 };
double redView[4] = { 0.25, 0.0, 0.5, 1.0 };
double greenView[4] = { 0.5, 0.0, 0.75, 1.0 };
double blueView[4] = { 0.75, 0.0, 1.0, 1.0 };
vtkSmartPointer<vtkRenderer> origRender =
vtkSmartPointer<vtkRenderer>::New();
origRender->SetViewport(origView);
origRender->AddActor(origActor);
origRender->ResetCamera();
origRender->SetBackground(1.0, 1.0, 1.0);
vtkSmartPointer<vtkRenderer> redRender =
vtkSmartPointer<vtkRenderer>::New();
redRender->SetViewport(redView);
redRender->AddActor(redActor);
redRender->ResetCamera();
redRender->SetBackground(1.0, 1.0, 1.0);
vtkSmartPointer<vtkRenderer> greenRender =
vtkSmartPointer<vtkRenderer>::New();
greenRender->SetViewport(greenView);
greenRender->AddActor(greenActor);
greenRender->ResetCamera();
greenRender->SetBackground(1.0, 1.0, 1.0);
vtkSmartPointer<vtkRenderer> blueRender =
vtkSmartPointer<vtkRenderer>::New();
blueRender->SetViewport(blueView);
blueRender->AddActor(blueActor);
blueRender->ResetCamera();
blueRender->SetBackground(1.0, 1.0, 1.0);
//上舞台
vtkSmartPointer<vtkRenderWindow> renderwindow =
vtkSmartPointer<vtkRenderWindow>::New();
renderwindow->AddRenderer(origRender);
renderwindow->AddRenderer(redRender);
renderwindow->AddRenderer(greenRender);
renderwindow->AddRenderer(blueRender);
renderwindow->SetSize(960, 320);
renderwindow->Render();
renderwindow->SetWindowName("ExtraImageColorComponents");
//设置交互
vtkSmartPointer<vtkRenderWindowInteractor> rwi =
vtkSmartPointer<vtkRenderWindowInteractor>::New();
vtkSmartPointer<vtkInteractorStyleImage> style =
vtkSmartPointer<vtkInteractorStyleImage>::New();
rwi->SetInteractorStyle(style);
rwi->SetRenderWindow(renderwindow);
rwi->Initialize();
rwi->Start();
return 0;
}
标签:1.0,origRender,图像,vtkSmartPointer,灰度,New,renderwindow,彩色图像,include From: https://blog.51cto.com/u_15926338/5980096