将帧从 h264 流解码到 OpenCV Mat
Decode frame from h264 stream to OpenCV Mat
产品: Bebop 产品版本:软件版本 v2.0.29 开发工具包版本:ARSDK3_version_3_14_0 使用libARController:是 SDK平台:UNIX 可使用官方应用程序复制:否
我一直在尝试使用 Ubuntu 3 将 ARSDK 3 的ARCONTROLLER_Frame_t转换为 OpenCV 图像 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);
有人知道从中获取实际图像的方法吗?
ARCONTROLLER_Frame_t
不包含 RGB 图像;它包含一个 H.264帧,必须使用 H.264 解码器将其转换为 RGB 图像(例如,请参阅 Parrot 开发人员论坛上的此响应(。
Parrot 的这个旧示例代码演示了如何使用 ffmpeg/libav 库解码帧(在这里发布太长了(: https://github.com/Parrot-Developers/Samples/tree/59b6ba5cdc268fb6932d228db7b9169d9b69384c/Unix/BebopDroneDecodeStream
- C++中的openCV Mat访问冲突
- 如何通过引用传递OpenCV MAT
- Read OpenCV Mat 16bit to QImage 8bit Greyscale
- 将本地 OpenCV Mat 变量声明为静态以防止重新分配
- 将 OpenCv Mat 从 C++ 传递给 Python
- 将帧从 h264 流解码到 OpenCV Mat
- 如果函数使用 OPENCV Mat 作为输入,如何编写头文件?
- 无法从Java读取C++中保存的Opencv Mat映像
- 如何通过套接字发送OpenCV Mat
- 如何有效地在OpenCV Mat和GpuMat上进行元素处理?
- 什么是使用 opencv::Mat 优化 c++ 矩阵计算
- openCV Mat 中的值在自定义类构造函数中设置后不会保留
- OpenCV Mat 的逗号分隔初始值设定项是如何用C++实现的?
- Libav AVFrame to Opencv Mat to AVPacket conversion
- 采用OpenCV Mat<doube>并转换为12位值数组。
- 如何将C++数组转换为opencv Mat
- 通过QT WebSocket将OpenCV Mat Image发送到HTML客户端
- OpenCV Mat::row assignment
- 如何在 OpenCV Mat 中保留固定的缓冲区大小
- OPENCV MAT问题:直方图和此循环之间的差异