【问题标题】:3d to 2d image transformation - PointCloud to OpenCV Image - C++3d 到 2d 图像转换 - PointCloud 到 OpenCV 图像 - C++
【发布时间】:2016-03-30 14:48:51
【问题描述】:

我正在从我的 Kinect 收集手部 3d 图像,并且我想仅使用 X 和 Y 值生成 2d 图像,以使用 OpenCV 进行图像处理。 3d 矩阵的大小是可变的,取决于 Kinect 的输出,并且 X 和 Y 值的比例不合适,无法生成 2d 图像。我的 3d 点和我的 3d 图像是:http://postimg.org/image/g0hm3y06n/

我真的不知道如何生成 2d 图像来执行图像处理。

有人可以帮助我或有一个很好的例子,我可以用它来创建我的图像并针对该问题进行适当的缩放?我想输出 HAND CONTOURS。

【问题讨论】:

    标签: c++ opencv 3d 2d point-cloud-library


    【解决方案1】:

    我认为您应该将 Delaunay 三角剖分应用于点云的 2D 坐标(忽略深度),然后从三角形中删除太长的顶点。您可以通过计算每个区域的点数并根据您将获得的值评估平方根来估计长度阈值。进行三角测量后,您可以绘制填充三角形并找到轮廓。

    【讨论】:

    • 您好安德烈,感谢您的回答。我会找到的轮廓将是 3d 点?实际上,我想要的一种更简单的方法是创建一个 Mat、jpg 或其他类型的图像,我可以使用 OpenCV 执行图像处理以进行手势识别。你知道我该如何进行这种转换吗?
    • 可以使用形态学算子得到二值图像。您可以应用 cv::dilate ,其内核大小略大于图像上点之间的平均距离。这将使点变得更大,你会得到坚实的手部轮廓。然后,您可以应用侵蚀以将轮廓减小到初始大小。此操作名为关闭en.wikipedia.org/wiki/Closing_(morphology)
    • 嗨,安德烈,这对我来说很好,但我有一个基本问题,因为要进行侵蚀和膨胀,我需要创建一个可以用 OpenCV imread 读取的图像。现在我只有 PCD(点云文件),我已经做了一个投影,所以我的 X 和 Y 分量与 0 不同。你知道如何获取我的 PCD 文件并创建一个我可以用 imread 读取的文件?谢谢!
    • 我认为您需要执行以下步骤:1)测量点集尺寸(使用 boundingRect docs.opencv.org/modules/imgproc/doc/… )。 2)缩放你的点设置为方便的大小(比如宽度为 512px)。 3)将pointset的左上角偏移到图像原点。 4) 绘制点(例如,您可以使用直接写入内存或 cv::rectangle) 5) 应用形态学。 6) 寻找轮廓。如果使用绘图图元(矩形或圆形),则可能不需要膨胀运算符。
    【解决方案2】:

    我认为您正在寻找的是 OKPCL package.. 另外,请务必查看有关该主题的 this PCL post.. 还有一个 OpenCVPCL Bridge 课程,但显然该网站已关闭。

    最后,official word 表示 OpenCV 和 PCL 正在联手开发一个集成 GPU 计算与 2d/3D 感知和处理的开发平台。

    HTH

    【讨论】:

      【解决方案3】:

      您可以使用 PCL RangeImageRangeImagePlanar 类及其 createFromPointCloud 方法(我认为您确实有一个点云,对吗?或者您所说的 3D 图像是什么意思?)。

      然后您可以使用getImagePoint 函数创建一个OpenCV Mat。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-06-02
        • 1970-01-01
        • 2013-07-19
        • 2021-07-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多