繁体   English   中英

将帧从h264流解码到OpenCV Mat

[英]Decode frame from h264 stream to OpenCV Mat

产品:Bebop产品版本:软件版本v2.0.29 SDK版本:ARSDK3_version_3_14_0使用libARController:是SDK平台:UNIX可与官方应用程序复制:否

我一直在尝试使用Ubuntu 18.04将ARSDLER_Frame_t从ARSDK 3转换为OpenCV映像,最初,提供的示例程序利用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);

有人知道从中获取实际图像的方法吗?

ARCONTROLLER_Frame_t不包含RGB图像; 它包含一个H.264帧,必须使用H.264解码器将其转换为RGB图像(例如,请参阅Parrot开发人员论坛上的此响应 )。

来自Parrot的旧示例代码演示了如何使用ffmpeg / libav库对帧进行解码(在此处发布太长了): https : //github.com/Parrot-Developers/Samples/tree/59b6ba5cdc268fb6932d228db7b9169d9b69384c/Unix/BebopDroneDecodeStream

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM