【问题标题】:Quick conversion of pcl::PointCloud<PointXYZ> to std::vector<cv::Point3f> using no iteration不使用迭代将 pcl::PointCloud<PointXYZ> 快速转换为 std::vector<cv::Point3f>
【发布时间】:2019-05-15 19:15:02
【问题描述】:

我正在寻找一种将pcl::PointCloud&lt;PointXYZ&gt; 类型的PCL 点云转换为std::vector&lt;cv::Point3f&gt; 的快速方法。

问题是pcl::PointXYZ 由 4 个浮点数(x、y、z、填充)组成,而cv::Point3f 只有 3 个浮点数(x、y、z)。如果它们都是 3 个浮点数,我可以对数据缓冲区进行简单的指针转换。

所以,基本问题基本上是:如何在不使用迭代(即 for 循环)的情况下将具有 4 个浮点数的结构数组转换为具有 3 个浮点数的结构数组?

【问题讨论】:

  • 你不能。但是,如果您不喜欢代码中的循环,您可以使用例如std::transform。但也许你真正需要的是合适的迭代器?

标签: c++ arrays type-conversion


【解决方案1】:

如果您有一些点云 pcl::PointCloud&lt;pcl::PointXYZ&gt; cloud,并且您想创建一个包含 OpenCV 类型 cv::Point3f 的点向量,只需使用基于范围的 for 循环:

std::vector<cv::Point3f> points;

for (const auto& point : cloud) {
    points.push_back(cv::Point3f(point.x, point.y, point.z));
}

【讨论】:

    猜你喜欢
    • 2015-03-26
    • 2021-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-01
    • 2015-12-07
    • 2017-10-26
    相关资源
    最近更新 更多