首页 > 其他分享 >VTK_Learning_图像基本操作_彩色图像生成灰度图像_彩色图像成分提取

VTK_Learning_图像基本操作_彩色图像生成灰度图像_彩色图像成分提取

时间:2022-12-30 13:01:19浏览次数:45  
标签:1.0 origRender 图像 vtkSmartPointer 灰度 New renderwindow 彩色图像 include


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;
}

VTK_Learning_图像基本操作_彩色图像生成灰度图像_彩色图像成分提取_彩色图像成分提取

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;
}

VTK_Learning_图像基本操作_彩色图像生成灰度图像_彩色图像成分提取_灰度_02

 

标签:1.0,origRender,图像,vtkSmartPointer,灰度,New,renderwindow,彩色图像,include
From: https://blog.51cto.com/u_15926338/5980096

相关文章