Я пытаюсь создать облако точек, где каждая точка имеет цвет. Я могу получить только облако точек или заставить камеру сделать снимок, но мне нужно, чтобы они были как можно более одновременными. Если бы я мог найти изображение RGB с отметкой времени или вызвать функцию для получения текущего кадра, когда вызывается onXYZijAvailable()
, я бы сделал. Я мог просто пройтись по точкам, узнать, где они пересекаются с плоскостью изображения, и получить цвет этого пикселя.
Как и сейчас, я не нашел способа получить информацию о пикселях изображения или получить цветные точки. Я видел AR-приложения, в которых камера подключается к CameraView
, а затем что-то рендерится поверх, но приложение никогда не затрагивает поток с камеры.
Согласно этот должно быть возможно получить нужные мне данные и синхронизировать облако точек и плоскость изображения с помощью простого преобразования. Этот пост также говорит нечто подобное. Однако я понятия не имею, как получить данные RGB. Я не могу найти какие-либо проекты или учебные пособия с открытым исходным кодом.
Самое близкое, что я получил, это узнать, когда кадр готов, используя это:
public void onFrameAvailable(final int cameraId) {
if (cameraId == TangoCameraIntrinsics.TANGO_CAMERA_COLOR) {
//Get the new rgb frame somehow.
}
}
Я работаю с Java API и очень хотел бы не углубляться в JNI и NDK, если это вообще возможно. Как я могу получить кадр, который наиболее точно соответствует отметке времени моего текущего облака точек?
Спасибо за помощь.
Обновление:
Я реализовал его версию для процессора, и даже после небольшой оптимизации мне удалось получить только 0,5 FPS на небольшом облаке точек. Это также связано с тем, что цвета должны быть преобразованы из собственного цветового пространства Android NV21 в собственное цветовое пространство RGBA графического процессора. Я мог бы оптимизировать его дальше, но я не собираюсь получать эффект в реальном времени с этим. Процессор на устройстве Android просто не может работать достаточно хорошо. Если вы хотите сделать это на более чем нескольких тысячах точек, сделайте дополнительные хлопоты с использованием графического процессора или сделайте это сразу.