首页 > 解决方案 > 有没有办法访问在 ARCore 中已知 3D 坐标的点的 RGB 值?

问题描述

一旦我知道点云的 3D 坐标,我就会尝试提取 RGB 颜色信息。

为了获得点云,我使用了以下功能:-

PointCloud pointCloud = frame.acquirePointCloud();

得到点云后,我遍历缓冲区

FloatBuffer points_buffer = pointCloud.getPoints();
  while(points_buffer.hasRemaining())
  {
    float x = points_buffer.get();
    float y = points_buffer.get();
    float z = points_buffer.get();
    float confidence = points_buffer.get();
  }

我能够提取点的坐标,并且我需要将有关该点的颜色(RGB 值)的信息连同它一起存储。

我一直在尝试通过以下方法来做到这一点: -

1)使用以下方法保存每帧中的图像:-

Image m_img = frame.acquireCameraImage();

2)然后使用以下方法将 3D 坐标转换为屏幕坐标:-

将 3D 世界(arcore 锚点/姿势)转换为其对应的 2D 屏幕坐标

对于姿势,我使用 x,y,z 坐标进行平移,使用身份四元数进行旋转。

然后我打算查找位图中的值。

但是,我面临以下问题。

1 ) 捕获的图像是YUV_420_888 格式,我将其转换为ARGB_888 格式的位图失败。

2) 上述坐标转换链接有时会给出 x 坐标的负值。

给定 ARCore 中的 3D 坐标,有没有更好的方法来提取 RGB 值?

标签: androidimage-processingyuvarcore

解决方案


推荐阅读