Я пытаюсь извлечь информацию о цвете 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)Затем преобразуем трехмерные координаты в экранные координаты, используя: -
Преобразование трехмерного мира (привязка / поза дуги) в соответствующие ему 2D экранные координаты
Для позы яиспользуя координаты x, y, z для перевода и единичный кватернион для вращения.
Затем я планирую поискать значения в растровом изображении.
Однако я сталкиваюсь со следующими проблемами,
1) Захваченное изображение имеет формат YUV_420_888, и мне не удалось преобразовать его в растровое изображение в формате ARGB_888.
2) Описанная выше ссылка для преобразования координат иногда дает отрицательные значения дляX-координата.
Есть ли лучший способ извлечь значения RGB с учетом 3D-координаты в ARCore?