vtk加载rgb点云ply文件和灰白ply文件

1 篇文章 0 订阅
1 篇文章 0 订阅

vkt官方的例子是加载灰白的ply文件,但是当项目中用到rgb的ply文件就是显示不出来图像,具体的加载方法如下:

vtk加载RGB点云文件

#include “vtkAutoInit.h”
VTK_MODULE_INIT(vtkRenderingOpenGL2);
VTK_MODULE_INIT(vtkRenderingFreeType);
VTK_MODULE_INIT(vtkInteractionStyle)

#include <vtkPolyDataMapper.h>
#include <vtkActor.h>
#include <vtkRenderer.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkSmartPointer.h>
#include <vtkPLYReader.h>
#include
#include <vtkPolyData.h>
#include <vtkCellData.h>
#include <vtkVertexGlyphFilter.h>

int main()
{
std::string filename = “C:\Users\admin\Desktop\work\RGBPoints.ply”;
vtkSmartPointer reader =
vtkSmartPointer::New();
reader->SetFileName(filename.c_str());
reader->Update();

vtkSmartPointer<vtkPolyData> pPolyData = vtkSmartPointer<vtkPolyData>::New();
pPolyData->DeepCopy(reader->GetOutput());
vtkSmartPointer<vtkVertexGlyphFilter> pFilter = vtkSmartPointer<vtkVertexGlyphFilter>::New();
pFilter->AddInputData(pPolyData);
pFilter->Update();


vtkSmartPointer<vtkPolyDataMapper> mapper =
	vtkSmartPointer<vtkPolyDataMapper>::New();
mapper->SetInputConnection(pFilter->GetOutputPort());

vtkSmartPointer<vtkActor> actor =
	vtkSmartPointer<vtkActor>::New();
actor->SetMapper(mapper);

vtkSmartPointer<vtkRenderer> renderer =
	vtkSmartPointer<vtkRenderer>::New();
renderer->AddActor(actor);
renderer->SetBackground(.3, .6, .3);

vtkSmartPointer<vtkRenderWindow> renderWindow =
	vtkSmartPointer<vtkRenderWindow>::New();
renderWindow->AddRenderer(renderer);

vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor =
	vtkSmartPointer<vtkRenderWindowInteractor>::New();
renderWindowInteractor->SetRenderWindow(renderWindow);
renderWindow->Render();
renderWindowInteractor->Start();

return 0;

}

vtk加载灰度点云文件ply

#include “vtkAutoInit.h”
VTK_MODULE_INIT(vtkRenderingOpenGL2);
VTK_MODULE_INIT(vtkRenderingFreeType);
VTK_MODULE_INIT(vtkInteractionStyle)

#include <vtkPolyDataMapper.h>
#include <vtkActor.h>
#include <vtkRenderer.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkSmartPointer.h>
#include <vtkPLYReader.h>
#include
#include <vtkPolyData.h>
#include <vtkCellData.h>
#include <vtkVertexGlyphFilter.h>

int main()
{
std::string filename = “C:\Users\admin\Desktop\work\RGBPoints.ply”;
vtkSmartPointer reader =
vtkSmartPointer::New();
reader->SetFileName(filename.c_str());
reader->Update();

vtkSmartPointer<vtkPolyDataMapper> mapper =
	vtkSmartPointer<vtkPolyDataMapper>::New();
mapper->SetInputConnection(reader->GetOutputPort());

vtkSmartPointer<vtkActor> actor =
	vtkSmartPointer<vtkActor>::New();
actor->SetMapper(mapper);

vtkSmartPointer<vtkRenderer> renderer =
	vtkSmartPointer<vtkRenderer>::New();
renderer->AddActor(actor);
renderer->SetBackground(.3, .6, .3);

vtkSmartPointer<vtkRenderWindow> renderWindow =
	vtkSmartPointer<vtkRenderWindow>::New();
renderWindow->AddRenderer(renderer);

vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor =
	vtkSmartPointer<vtkRenderWindowInteractor>::New();
renderWindowInteractor->SetRenderWindow(renderWindow);
renderWindow->Render();
renderWindowInteractor->Start();

return 0;

}

VTK是一种强大的可视化工具库,它可以用于处理和显示各种类型的数据,包括点云数据。点云数据是由一系列离散的点组成的,每个点包含位置信息和颜色信息。 在VTK中使用RGB点云时,需要使用vtkPolyData数据结构来存储点云数据,并使用vtkPoints和vtkUnsignedCharArray来分别存储点的位置和颜色信息。 首先,我们需要创建一个vtkPolyData对象,并为其添加属性。使用vtkPoints来存储点的位置信息,每个点的位置由三个浮点数表示,分别表示X、Y和Z坐标。使用vtkUnsignedCharArray来存储点的颜色信息,每个点的颜色由三个无符号整数表示,分别表示红色、绿色和蓝色通道的值。可以使用vtkSmartPointer来管理对象的内存,以防止内存泄漏。 接下来,我们需要向vtkPolyData添加点云数据。可以使用vtkPolyData的SetPoints方法将vtkPoints对象与vtkPolyData关联起来,以存储点的位置信息。使用vtkPolyData的GetPointData方法可以获取点数据,然后使用SetScalars方法将vtkUnsignedCharArray对象与vtkPolyData关联起来,以存储点的颜色信息。 最后,我们可以使用vtkPolyDataMapper和vtkActor将点云数据渲染到屏幕上。vtkPolyDataMapper将点云数据转换为渲染器可以理解的形式,并将其与vtkActor关联起来。vtkActor定义了点云数据的显示属性,如颜色、大小和透明度等。 使用vtkRenderer和vtkRenderWindow可以创建一个窗口,并将vtkActor添加到渲染器中。最后,调用vtkRenderWindow的Render方法可以将渲染结果显示在窗口上。 总之,通过vtkPolyData、vtkPoints、vtkUnsignedCharArray等类,我们可以在VTK中使用RGB点云数据,并通过渲染器将其显示在屏幕上。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Pailugou

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值