点云法向量显示

点云法向量显示

向属性表添加
opengl32.lib

源程序

在这里插入代码片
#include<iostream>
#include<pcl/io/io.h>
#include<pcl/io/pcd_io.h>
#include<pcl/io/ply_io.h>
#include<pcl/features/normal_3d.h>
#include<pcl/visualization/cloud_viewer.h>
#include <vtkAutoInit.h>
VTK_MODULE_INIT(vtkRenderingOpenGL);
int main()
{
	pcl::PointCloud<pcl::PointXYZRGB>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZRGB>);
	pcl::io::loadPCDFile<pcl::PointXYZRGB>("Cylinder1.pcd", *cloud);//加载点云数据
	// 创建法向量估计对象并设置输入点云  
	pcl::NormalEstimation<pcl::PointXYZRGB, pcl::Normal> ne;
	ne.setInputCloud(cloud);

	// 创建KdTree对象用于近邻搜索  
	pcl::search::KdTree<pcl::PointXYZRGB>::Ptr tree(new pcl::search::KdTree<pcl::PointXYZRGB>());
	ne.setSearchMethod(tree);

	// 输出点云法向量  
	pcl::PointCloud<pcl::Normal>::Ptr cloud_normals(new pcl::PointCloud<pcl::Normal>);
	// 设置搜索半径  
	ne.setRadiusSearch(3);
	ne.setViewPoint(0, 0, 1);
	ne.compute(*cloud_normals);

	// 创建一个PCL可视化对象  
	pcl::visualization::PCLVisualizer viewer("3D Viewer");
	viewer.setBackgroundColor(0, 0, 0); // 设置背景色为黑色  
	// 添加法向量到视图
	viewer.addPointCloudNormals<pcl::PointXYZRGB, pcl::Normal>(cloud, cloud_normals); 
	//设置点云为单一颜色
	pcl::visualization::PointCloudColorHandlerCustom<pcl::PointXYZRGB> single_color(cloud, 0, 255, 0);
	// 添加点云到视图
	viewer.addPointCloud<pcl::PointXYZRGB>(cloud,single_color, "sample cloud"); 
	//设置要显示的点云大小
	viewer.setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 1, "sample cloud");
	//添加需要显示的点云法向。cloud为原始点云模型,normal为法向信息,10表示需要显示法向的点云间隔,即每10个点显示一次法向,0.05表示法向长度。
	viewer.addPointCloudNormals<pcl::PointXYZRGB, pcl::Normal>(cloud, cloud_normals, 3, 5, "normals");
	// 设置视图的姿态  
	//viewer.setCameraPosition(0, 0, 0, 0, 1, 0, 0, -1, 0);
	// 设置视图大小
	//viewer.setSize(800, 600);   

	// 开始可视化循环  
	while (!viewer.wasStopped())
	{
		viewer.spinOnce(100);
	}

	return 0;
}

在这里插入图片描述

文章参考
PCL 计算点云的法向量并定向 - 飞我执笔的文章 - 知乎
https://zhuanlan.zhihu.com/p/461263247

  • 9
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值