- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我编写了一个小代码片段,使用 PCL 将两个点云与 ICP 合并。然而,无论我做什么,我最终得到的最终点云只包含第一个点云。图片:
#define _CRT_SECURE_NO_DEPRECATE
#include <pcl/point_types.h>
#include <pcl/visualization/cloud_viewer.h>
#include <pcl/registration/icp.h>
#include <pcl/io/pcd_io.h>
#include <boost/make_shared.hpp>
#include "Dot3DReader.h"
int main(int argc, char** argv)
{
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud1(new pcl::PointCloud<pcl::PointXYZ>);
if (pcl::io::loadPCDFile<pcl::PointXYZ>("D:/Imerso/PCL PointCloudExampleData/Frame1.pcd", *cloud1) == -1) //* load the file
{
PCL_ERROR("Couldn't read file Frame1.pcd \n");
return (-1);
}
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud2(new pcl::PointCloud<pcl::PointXYZ>);
if (pcl::io::loadPCDFile<pcl::PointXYZ>("D:/Imerso/PCL PointCloudExampleData/Frame2.pcd", *cloud2) == -1) //* load the file
{
PCL_ERROR("Couldn't read file Frame2.pcd \n");
return (-1);
}
std::cout << "Read both files." << std::endl;
pcl::IterativeClosestPoint<pcl::PointXYZ, pcl::PointXYZ> icp;
icp.setInputSource(cloud1);
icp.setInputTarget(cloud2);
boost::shared_ptr<pcl::PointCloud<pcl::PointXYZ>> Final(new pcl::PointCloud<pcl::PointXYZ>());
std::cout << "Starting aligning." << std::endl;
icp.align(*Final);
std::cout << "Finished aligning." << std::endl;
std::cout << "has converged:" << icp.hasConverged() << " score: " <<
icp.getFitnessScore() << std::endl;
// CloudViewer を生成
// (表示は別スレッドで実行される)
pcl::visualization::CloudViewer viewer("Final cloud Viewer");
// CloudViewer で点群を表示
viewer.showCloud(Final);
while (true) {
// ESC キーで終了
if (GetKeyState(VK_ESCAPE) < 0) {
return 0;
}
}
return 0;
}
作为奖励,我还想在使用 RGB 点时保留对齐点的颜色。我该怎么做?
我的猜测是它没有找到匹配项,只是丢弃了第二个点云。
感谢您的帮助。
最佳答案
我不确定是我愚蠢还是文档和示例代码具有误导性,但我设法弄清楚了函数的作用以及如何使用它们。
.align()
函数仅对源点云应用变换,使其与目标点云匹配。它返回的点云是转换后的源云,因此您所要做的就是将其附加到全局云。
示例代码: boost::shared_ptr> cloud1, cloud2, GlobalCloud;//用你想要合并的点云填充前两个。
pcl::IterativeClosestPoint<pcl::PointXYZRGB, pcl::PointXYZRGB> icp;
icp.setInputSource(cloud1); //This cloud will be transformed to match
icp.setInputTarget(cloud2); //this cloud. The result is stored in the cloud provided as input below.
icp.align(*cloud1); //Overwrite the source cloud with the transformed cloud.
*GlobalCloud = *cloud1 + *cloud2; //Merge the two now aligned and matched clouds.
//Do whatever you want with the global cloud.
我希望这对某些人有所帮助,这样他们就不必通过阅读源代码来解码发生的事情。 (^-^)
有什么想知道的就问吧,我会尽力帮忙的。
关于c++ - PCL ICP功能不添加第二点云,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32220550/
我想在可移植的 C# 类中实现这个逻辑: static JsonWebToken() { HashAlgorithms = new Dictionary>
我有一个线程可以在处理点云时将其可视化。我还需要可视化法线,我该如何更新它们? 我找不到像普通云的 updateClouds 这样的东西。 void pclVisualizerThread::oper
下面的函数没有产生结果。换句话说,点云中的点数与降采样前完全相同。我尝试了从 0.01 一直到您在下面看到的那些不同的叶子大小数字,但它们都产生相同的结果。我不得不对从 pcl::PointCloud
我是 PCL 的新手。我正在使用 PCL 库,我正在寻找一种从点云中提取点或将特定点复制到新点的方法。我想验证每个点是否符合条件,我想获得一个只有好的点的点云。谢谢! 最佳答案 使用 ExtractI
我更新到了最新版本的 Xamarin,其中“完全支持”PCL。我现在如何使用 Azure 移动服务? 如果我创建 PCL 库并尝试使用 NuGet 添加它,则无法安装“Newtonsoft.Json
创建 C# Xamarin Forms 应用 添加 C# PCL 添加 F# PCL 尝试添加从 C# PCL 到 F# PCL 的引用 -> 在引用对话框中您将看到:不兼容的框架定义::NETFra
我现在正在使用一些 Laserscans,并希望在 C++ 中对 PointClouds 进行下采样。我在构建过程中遇到了一个奇怪的问题,我认为在我尝试编译代码时的库链接过程中。这里是问题似乎来自的最
我想知道这是否可能。我有一个功能: pcl::PointCloud createPointCloud(std::Vector input) 返回一个点云。我想知道是否可以获取这个点云,并制作一个指向
我正在尝试使用点云库提供的 RANSAC 方法估计通过点云点的线。我可以创建对象,并毫无问题地估计线模型,如下所示: pcl::PointCloud::ConstPtr source_cloud(ne
正在尝试使用 PCL为 mvvmcross使用 Profile 78 的 TPL (关于问题 TPL on PCL of mvvmcross) 上 iOS项目正在运行,但不适用于 android .
我使用以下命令安装了 PCL。 sudo add-apt-repository ppa:v-launchpad-jochen-sprickerhof-de/pcl sudo apt-get updat
PCL库中是否有任何函数可以保存pcl::PointCloud可以用Meshlab打开的XYZRGB格式的点云? 好像pcl::io::savePCDFileASCII (filename, clou
我正在尝试使用 PortableRest从 Xamarin Forms 对 Web API 2.2 Rest 服务进行异步调用。 我想我遇到了某种死锁/同步上下文问题,但我无法解决(新手到异步等)。
我正尝试在 C++ 中运行以下命令: #include #include "pcl/pcl_base.h" #include "pcl/PointIndices.h" #include "pcl/c
在 .NET 标准 PCL 项目中,我想引用一个针对配置文件 111 (lib\portable-win8+net45+wpa81+MonoAndroid+Xamarin.iOS10) 的私有(pri
我想使用 PCL 加载点云数据。我可以在教程中正确加载示例数据,但是当我尝试使用我的数据时,pcd 文件的值被更改为非常小的值。 终端输出图像 实际值类似于 3603538.71629,但当 PCL
我在创建 F# 可移植项目时遇到问题,该项目应该从 C# 可移植项目中引用。添加此类引用时,会出现以下消息: Unable to add a reference to 'PortableLibrary
操作系统:Ubuntu20.04 PCL信息: Package: libpcl-dev Version: 1.10.0+dfsg-5ubuntu1 Priority: extra Section: u
我想删除 SQLite.Net-PCL打包并想使用sqlite-net-pcl因为我后来发现SQLite.Net-PCL官方没有维护。 我的 Xamarin 项目中有一些表将 GUID 存储为字符串类
我有一些代码如下所示: typedef pcl::PointXYZRGB pcl_ColorPointType; typedef pcl::PointXYZ pcl_PointType; typede
我是一名优秀的程序员,十分优秀!