EasyAR 将相机帧作为 OpenCV Mat 访问

EasyAR access Camera Frames as OpenCV Mat

我正在使用 EasyAR 在 android 上使用 C++ 开发一个应用程序,我正在尝试将 opencv 与它一起使用,我想要实现的是:获取它从中获得的 easyAR 框架相机作为 Mat 并使用 opencv 进行一些处理,然后 return 要查看的帧。

为什么要这么做?简单地说我只是在EasyAR相机框架跨平台访问之后(我觉得它真的很快,我只是构建了示例HelloAR)

在Sample HelloAR中,有一行 auto frame = streamer->peek();

  1. 有没有办法将其转换为在 openCV 中使用?

  2. 在 IOS 和 Android(最小 API 16)中是否有另一种从 c++ 访问相机帧的方法?

感谢您的帮助,谢谢。

这是示例 link,我正在使用 HelloAR http://s3-us-west-2.amazonaws.com/easyar/sdk/EasyAR_SDK_2.0.0_Basic_Samples_Android_2017-05-29.tar.xz

好的,我设法解决了这个问题 所以简单的框架(EasyAR 中的 class 框架)包含图像向量(同一帧可能是不同的图像),访问该向量 returns 一个图像对象,方法称为数据(字节数组)和可用于在 opencv

中初始化 Mat

这是为任何搜索相同内容的人澄清的代码

unsigned char* imageBuffer = static_cast<unsigned char*>(frame->images().at(0)->data());

int height = frame->images()[0]->height(); // height of the image
int width = frame->images()[0]->width(); // width of image
// Obtained Frame is YUV21 by default, so convert that to RGBA
cv::Mat _yuv(height+height/2, width, CV_8UC1, imageBuffer);
cv::cvtColor(_yuv, _yuv, CV_YUV2RGBA_NV21);