简介
- 点云相关的理论基础笔记
pcl::removeNaNFromPointCloud() 函数 详解
pcl::removeNaNFromPointCloud()
函数是 Point Cloud Library(PCL)中的一个全局函数,用于从点云数据中移除包含 NaN(Not-a-Number)值的点。
以下是关于 pcl::removeNaNFromPointCloud()
函数的详细解释:
函数签名:函数的签名如下:
1
2
3
4
5
6template <typename PointT>
void pcl::removeNaNFromPointCloud(
const pcl::PointCloud<PointT> &cloud_in,
pcl::PointCloud<PointT> &cloud_out,
std::vector<int> &index_mapping,
float bad_point = std::numeric_limits<float>::quiet_NaN());模板参数:
PointT
:点的数据类型。你需要提供点云中点的实际数据类型,例如pcl::PointXYZ
、pcl::PointXYZRGB
等。
参数:
cloud_in
:输入的点云数据对象,类型为pcl::PointCloud<PointT>
。cloud_out
:移除 NaN 值后的输出点云数据对象,类型为pcl::PointCloud<PointT>
。index_mapping
:一个整数向量,用于存储输入点云中有效点的索引映射到输出点云的索引。可以用于重新映射索引关系。bad_point
(可选):表示无效点的数值,默认为std::numeric_limits<float>::quiet_NaN()
。
功能:
- 该函数用于从输入的点云数据中移除包含 NaN 值的点,并将有效的点存储在输出点云数据对象中。
- 函数还会返回一个索引映射,该映射表示输入点云中有效点的索引与输出点云中的索引之间的关系。
示例:
1
2
3
4
5
6
7
8pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);
// 从某处加载点云数据到 cloud
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_filtered(new pcl::PointCloud<pcl::PointXYZ>);
std::vector<int> index_mapping;
pcl::removeNaNFromPointCloud(*cloud, *cloud_filtered, index_mapping);
// cloud_filtered 现在包含了没有 NaN 值的有效点注意事项:
pcl::removeNaNFromPointCloud()
函数可以用于在处理点云数据之前移除无效的 NaN 值,以确保数据的有效性。index_mapping
向量可以帮助你在移除 NaN 值后保持有效点的索引关系,以便在后续处理中使用。
总之,pcl::removeNaNFromPointCloud()
函数是用于从点云数据中移除 NaN 值的有用函数,以确保在处理和可视化点云数据时不会受到无效数据的影响。
pcl::visualization::PCLVisualizer::spinOnce() 函数 详解
pcl::visualization::PCLVisualizer::spinOnce()
函数是 Point Cloud Library(PCL)中 pcl::visualization::PCLVisualizer
类的一个成员函数,用于在可视化窗口中执行一次事件循环,以响应用户的交互操作和更新可视化。
以下是关于 spinOnce()
函数的详细解释:
函数签名:函数的签名如下:
1
2
3bool pcl::visualization::PCLVisualizer::spinOnce(
int time = 1,
bool force_redraw = false);参数:
time
:事件循环的持续时间(毫秒),默认为1毫秒。这个参数控制函数在循环内等待多长时间,以便检测用户输入和更新可视化。force_redraw
:一个布尔值,用于指定是否强制重新绘制可视化窗口。如果设置为true
,则会在循环内强制重新绘制窗口。
功能:
- 该函数在可视化窗口中执行一次事件循环,用于检测用户的交互操作(例如鼠标、键盘事件)以及更新可视化内容。它会等待一段时间,以便检测输入和更新。
- 如果有用户交互操作或更新,函数将返回
true
。如果没有任何交互操作或更新,函数将返回false
。
示例:
1
2
3
4
5
6
7
8
9
10
11
12
13pcl::visualization::PCLVisualizer::Ptr viewer(new pcl::visualization::PCLVisualizer("PointCloud Viewer"));
// 添加点云到可视化窗口
pcl::PointCloud<pcl::PointXYZRGB>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZRGB>);
// 从某处加载点云数据到 cloud
pcl::visualization::PointCloudColorHandlerRGBField<pcl::PointXYZRGB> color_handler(cloud);
viewer->addPointCloud(cloud, color_handler, "cloud");
// 进入事件循环
while (!viewer->wasStopped()) {
viewer->spinOnce();
}注意事项:
- 在调用
spinOnce()
函数之后,程序将在事件循环中等待,直到用户进行交互操作或更新,或者直到可视化窗口被关闭。 - 在循环中使用
spinOnce()
可以实现交互式操作和动态更新,但要确保循环不会被阻塞,以便及时响应用户的操作。
- 在调用
总之,pcl::visualization::PCLVisualizer::spinOnce()
函数是用于在可视化窗口中执行一次事件循环的重要函数,用于检测用户的交互操作和更新可视化内容。
pcl::visualization::PCLVisualizer::updatePointCloud() 函数 详解
pcl::visualization::PCLVisualizer::updatePointCloud()
函数是 Point Cloud Library(PCL)中 pcl::visualization::PCLVisualizer
类的一个成员函数,用于更新已经添加到可视化窗口中的点云数据。
以下是关于 updatePointCloud()
函数的详细解释:
函数签名:函数的签名如下:
1
2
3
4void pcl::visualization::PCLVisualizer::updatePointCloud(
const PointCloudT &cloud,
const PointCloudColorHandler<PointT> &color_handler,
const std::string &id = "cloud");参数:
cloud
:新的点云数据,类型为PointCloudT
,可以是pcl::PointCloud<pcl::PointXYZ>
、pcl::PointCloud<pcl::PointXYZRGB>
等。color_handler
:用于指定点云的颜色处理器,例如pcl::visualization::PointCloudColorHandlerCustom
。id
:要更新的点云的标识符。
功能:
- 该函数用于更新已经添加到
pcl::visualization::PCLVisualizer
对象中的点云数据。你可以用新的点云数据替换已有的点云数据,从而实现动态更新和可视化。
- 该函数用于更新已经添加到
示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16pcl::visualization::PCLVisualizer::Ptr viewer(new pcl::visualization::PCLVisualizer("PointCloud Viewer"));
pcl::PointCloud<pcl::PointXYZRGB>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZRGB>);
// 从某处加载点云数据到 cloud
pcl::visualization::PointCloudColorHandlerRGBField<pcl::PointXYZRGB> color_handler(cloud);
// 添加点云到可视化窗口
viewer->addPointCloud(cloud, color_handler, "cloud");
// 更新点云数据
pcl::PointCloud<pcl::PointXYZRGB>::Ptr newCloud(new pcl::PointCloud<pcl::PointXYZRGB>);
// 从某处加载新的点云数据到 newCloud
// 更新点云
viewer->updatePointCloud(newCloud, color_handler, "cloud");注意事项:
updatePointCloud()
函数用于更新已添加的点云,你需要提供新的点云数据和对应的颜色处理器。- 点云的更新将在调用
spin()
或spinOnce()
方法后生效,以确保更新能够在可视化窗口中显示出来。
总之,pcl::visualization::PCLVisualizer::updatePointCloud()
函数是一个重要的函数,用于在可视化窗口中更新已添加的点云数据,以实现动态更新和交互式操作。
pcl::visualization::PCLVisualizer::addPointCloud() 函数 详解
pcl::visualization::PCLVisualizer::addPointCloud()
函数是 Point Cloud Library(PCL)中 pcl::visualization::PCLVisualizer
类的一个成员函数,用于将点云添加到可视化窗口中进行显示和交互。
以下是关于 addPointCloud()
函数的详细解释:
函数签名:函数的签名如下:
1
2
3
4
5void pcl::visualization::PCLVisualizer::addPointCloud(
const PointCloudT &cloud,
const PointCloudColorHandler<PointT> &color_handler,
const std::string &id = "cloud",
int viewport = 0);参数:
cloud
:要添加的点云对象,类型为PointCloudT
,可以是pcl::PointCloud<pcl::PointXYZ>
、pcl::PointCloud<pcl::PointXYZRGB>
等。color_handler
:用于指定点云的颜色处理器,可以是pcl::visualization::PointCloudColorHandlerCustom
或其他颜色处理器。id
(可选):点云的标识符,用于在之后进行引用。默认为 “cloud”。viewport
(可选):指定要在哪个视口中添加点云。默认为视口0,通常情况下只有一个视口。
功能:
- 该函数用于在
pcl::visualization::PCLVisualizer
对象中添加一个点云,以便在可视化窗口中显示和交互。 - 你可以使用不同的颜色处理器来设置点云的颜色,例如使用
PointCloudColorHandlerCustom
来设置每个点的颜色。
- 该函数用于在
示例:
1
2
3
4
5
6
7
8
9
10
11pcl::visualization::PCLVisualizer::Ptr viewer(new pcl::visualization::PCLVisualizer("PointCloud Viewer"));
// 创建点云对象
pcl::PointCloud<pcl::PointXYZRGB>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZRGB>);
// 从某处加载点云数据到 cloud
// 创建颜色处理器
pcl::visualization::PointCloudColorHandlerRGBField<pcl::PointXYZRGB> color_handler(cloud);
// 添加点云到可视化窗口
viewer->addPointCloud(cloud, color_handler, "cloud");注意事项:
- 你需要在调用
addPointCloud()
函数之前创建并加载好点云数据对象。 - 如果要添加多个点云,你可以通过提供不同的标识符来区分它们。
- 添加点云之后,你需要调用
spin()
或spinOnce()
方法来更新显示和交互。
- 你需要在调用
总之,pcl::visualization::PCLVisualizer::addPointCloud()
函数是用于将点云添加到可视化窗口中的重要函数,允许你在可视化中呈现和交互式操作点云数据。
pcl::visualization::PCLVisualizer::addPointCloudpcl::PointXYZRGB() 函数 详解
pcl::visualization::PCLVisualizer::addPointCloud<pcl::PointXYZRGB>()
函数是 Point Cloud Library(PCL)中 pcl::visualization::PCLVisualizer
类的一个成员函数的模板化版本,用于将带有颜色信息的 pcl::PointCloud<pcl::PointXYZRGB>
类型的点云添加到可视化窗口中进行显示和交互。
以下是关于 addPointCloud<pcl::PointXYZRGB>()
函数的详细解释:
函数签名:函数的签名如下:
1
2
3
4void pcl::visualization::PCLVisualizer::addPointCloud<pcl::PointXYZRGB>(
const typename pcl::PointCloud<pcl::PointXYZRGB>::ConstPtr &cloud,
const std::string &id = "cloud",
int viewport = 0);模板参数:
pcl::PointXYZRGB
:点云数据的类型。这里的pcl::PointXYZRGB
表示点云中的每个点都具有 XYZ 坐标和 RGB 颜色信息。
参数:
cloud
:要添加的pcl::PointCloud<pcl::PointXYZRGB>
类型的点云对象,使用ConstPtr
类型传递。id
(可选):点云的标识符,用于在之后进行引用。默认为 “cloud”。viewport
(可选):指定要在哪个视口中添加点云。默认为视口0,通常情况下只有一个视口。
功能:
- 该函数用于在
pcl::visualization::PCLVisualizer
对象中添加一个pcl::PointXYZRGB
类型的点云,以便在可视化窗口中显示和交互。
- 该函数用于在
示例:
1
2
3
4
5
6
7
8pcl::visualization::PCLVisualizer::Ptr viewer(new pcl::visualization::PCLVisualizer("PointCloud Viewer"));
// 创建点云对象
pcl::PointCloud<pcl::PointXYZRGB>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZRGB>);
// 从某处加载点云数据到 cloud
// 添加点云到可视化窗口
viewer->addPointCloud<pcl::PointXYZRGB>(cloud, "cloud");注意事项:
- 你需要在调用
addPointCloud<pcl::PointXYZRGB>()
函数之前创建并加载好pcl::PointXYZRGB
类型的点云数据对象。 - 如果要添加多个点云,你可以通过提供不同的标识符来区分它们。
- 添加点云之后,你需要调用
spin()
或spinOnce()
方法来更新显示和交互。
- 你需要在调用
总之,pcl::visualization::PCLVisualizer::addPointCloud<pcl::PointXYZRGB>()
函数是用于将 pcl::PointXYZRGB
类型的点云添加到可视化窗口中的模板化函数,允许你在可视化中呈现和交互式操作带有颜色信息的点云数据。
pcl::visualization::PCLVisualizer::removeAllPointClouds()
pcl::visualization::PCLVisualizer::removeAllPointClouds()
函数是 Point Cloud Library(PCL)中 pcl::visualization::PCLVisualizer
类的一个成员函数,用于从可视化窗口中移除所有已添加的点云。
以下是关于 removeAllPointClouds()
函数的详细解释:
函数签名:函数的签名如下:
1
void pcl::visualization::PCLVisualizer::removeAllPointClouds(const std::string &id = std::string())
参数:
id
(可选):一个字符串参数,用于指定要移除的点云的标识符。如果提供了标识符,函数将只移除具有相同标识符的点云。如果未提供标识符,则函数将移除所有已添加的点云。
功能:
- 当你在
pcl::visualization::PCLVisualizer
对象中添加多个点云之后,你可以使用removeAllPointClouds()
函数一次性将所有点云从可视化窗口中移除。这对于清除之前的点云可视化,以便更新和重新绘制场景非常有用。
- 当你在
示例:
1
2
3
4
5
6
7
8
9pcl::visualization::PCLVisualizer::Ptr viewer(new pcl::visualization::PCLVisualizer("PointCloud Viewer"));
// 添加多个点云
viewer->addPointCloud(cloud1, "cloud1");
viewer->addPointCloud(cloud2, "cloud2");
viewer->addPointCloud(cloud3, "cloud3");
// 移除所有点云
viewer->removeAllPointClouds();注意事项:
- 如果你希望只移除特定标识符的点云,可以提供相应的标识符作为函数参数。
- 在使用
removeAllPointClouds()
函数之后,如果需要重新添加点云,你需要重新调用addPointCloud()
或其他相关的添加函数。
总之,pcl::visualization::PCLVisualizer::removeAllPointClouds()
函数是一个方便的方法,用于一次性移除 pcl::visualization::PCLVisualizer
对象中的所有已添加的点云,从而清空可视化窗口,以便更新或重新绘制点云数据。