Декодировать кадр из потока h264 в OpenCV Mat

Продукт: Бибоп
Версия продукта: версия программного обеспечения v2.0.29
Версия SDK: ARSDK3_version_3_14_0
Использование libARController: Да
Платформа SDK: UNIX
Воспроизводится с официальным приложением: НЕТ

Я пытался преобразовать ARCONTROLLER_Frame_t из ARSDK 3 в образ OpenCV с использованием Ubuntu 18.04, первоначально в предоставленном примере программы использовался MPlayer для открытия FIFO, где программа записывала все кадры, полученные от дрона, мне удалось получить изображения из указанного потока, используя ffmpeg во время его работы. Я также попытался дать OpenCV указанный файл для использования в качестве источника для VideoCapture, который работал, но был ужасно задержан. В настоящее время я пытаюсь дать OpenCV кадр за кадром.

Это скриншот В определении ARCONTROLLER_Frame_t документация очень расплывчатая о том, как все работает.

В настоящее время я получаю следующее изображение:
Скриншот полученного изображения

Ранее я использовал это, чтобы попытаться декодировать его, предполагая, что оно было в формате RGB, это изображение реагирует на взаимодействие с камерой, поэтому я предполагаю, что это правильные данные:

void rawToMat(Mat &destImage, ARCONTROLLER_Frame_t &sourceImage) {
if (sourceImage.used == 0) {
return;
}
uchar *pointerImage = destImage.ptr(0);

for (int i = 0; i < 480 * 856; i++) {
pointerImage[3 * i] = sourceImage.data[3 * i + 2];
pointerImage[3 * i + 1] = sourceImage.data[3 * i + 1];
pointerImage[3 * i + 2] = sourceImage.data[3 * i];
}
}

Но я обнаружил, что это обеспечивает тот же результат:

ARCONTROLLER_Frame_t newFrame = getCurrentFrame();
Mat currentImage = Mat(480, 856, CV_8UC3, newFrame.data);

Кто-нибудь знает способ получить реальное изображение из этого?

0

Решение

ARCONTROLLER_Frame_t не содержит изображения RGB; он содержит кадр H.264, который должен быть преобразован в изображение RGB с использованием декодера H.264 (например, см. этот ответ на форуме разработчиков Parrot).

Этот старый пример кода из Parrot демонстрирует, как декодировать фреймы с использованием библиотеки ffmpeg / libav (это слишком долго, чтобы публиковать здесь): https://github.com/Parrot-Developers/Samples/tree/59b6ba5cdc268fb6932d228db7b9169d9b69384c/Unix/BebopDroneDecodeStream

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector