pcl::PointCloudpcl::SHOT352::Ptr model_descriptors(new pcl::PointCloudpcl::SHOT352());如何对model_descriptors的某个值进行输出
时间: 2023-07-02 16:15:29 浏览: 86
如果想要输出 `model_descriptors` 中第一个点的特征描述子的第一个值,可以使用以下代码:
```
std::cout << model_descriptors->at(0).descriptor[0] << std::endl;
```
这里假设 `model_descriptors` 是 `PointCloud<pcl::SHOT352>::Ptr` 类型的智能指针,且至少包含一个点。`at(0)` 表示获取第一个点,`.descriptor` 表示获取该点的特征描述子,`[0]` 表示获取描述子中的第一个值。
相关问题
find_match_shot(pcl::PointCloudpcl::SHOT352::Ptr model_descriptors, pcl::PointCloudpcl::SHOT352::Ptr scene_descriptors, pcl::CorrespondencesPtr model_scene_corrs)如果里面的scene_descriptors是二维的布尔型描述子,如何改
如果scene_descriptors是二维的布尔型描述子,那么在函数中需要将其转换为PCL的SHOT352描述子类型。可以通过以下步骤实现:
1. 创建一个空的SHOT352描述子指针,初始化为空点云:
```
pcl::PointCloud<pcl::SHOT352>::Ptr scene_descriptors_shot(new pcl::PointCloud<pcl::SHOT352>);
scene_descriptors_shot->width = scene_descriptors->width;
scene_descriptors_shot->height = scene_descriptors->height;
scene_descriptors_shot->is_dense = scene_descriptors->is_dense;
```
2. 遍历布尔型描述子,将每个二维布尔向量转换为一个SHOT352描述子:
```
for (size_t i = 0; i < scene_descriptors->size(); ++i) {
pcl::SHOT352 descriptor;
for (int j = 0; j < 352; ++j) {
descriptor.descriptor[j] = (float)scene_descriptors->at(i)[j];
}
scene_descriptors_shot->push_back(descriptor);
}
```
3. 将转换后的SHOT352描述子传入函数中:
```
find_match_shot(model_descriptors, scene_descriptors_shot, model_scene_corrs);
```
这样就可以在函数中使用SHOT352描述子进行匹配了。
pcl::PointCloud<pcl::SHOT352>::Ptr model_descriptors如果model_descriptors是布尔型描述子,要怎么改
如果 `model_descriptors` 变量是布尔型描述子,则需要将 `pcl::SHOT352` 类型的指针改为 `pcl::PointCloud<pcl::BINARY>::Ptr` 类型的指针,如下所示:
```
pcl::PointCloud<pcl::BINARY>::Ptr model_descriptors(new pcl::PointCloud<pcl::BINARY>());
```
然后,你需要在代码中将 `SHOT352` 相关的部分修改为 `BINARY` 相关的部分。例如,将 `pcl::SHOT352::Ptr` 修改为 `pcl::BINARY::Ptr`,将 `pcl::KdTreeFLANN<pcl::SHOT352>` 修改为 `pcl::KdTreeFLANN<pcl::BINARY>`,将 `pcl::CorrespondencesPtr` 修改为 `pcl::CorrespondencesPtr`,等等。最后,你需要根据实际数据特征来设置汉明距离的阈值,以便进行正确的匹配。
阅读全文
相关推荐
















