EasyAR 作为 OpenCV Mat 访问相机帧
Posted
技术标签:
【中文标题】EasyAR 作为 OpenCV Mat 访问相机帧【英文标题】:EasyAR access Camera Frames as OpenCV Mat 【发布时间】:2017-09-10 03:12:15 【问题描述】:我正在使用 EasyAR 在 android 上使用 C++ 开发应用程序,我正在尝试使用 opencv,我想要实现的是:获取从相机获取的 easyAR 帧作为 Mat 并执行使用 opencv 进行一些处理,然后返回要查看的帧。
为什么要这么做?索性我只是在EasyAR摄像头框架跨平台接入之后(我觉得真的很快,我刚建了样例HelloAR)
在示例 HelloAR 中,有一行 auto frame = streamer->peek();
有没有办法将其转换为在 openCV 中使用?
在 ios 和 Android(最低 API 16)中是否有其他方法可以从 c++ 访问相机帧?
感谢您的帮助,谢谢。
这里是示例链接,我使用的是 HelloAR http://s3-us-west-2.amazonaws.com/easyar/sdk/EasyAR_SDK_2.0.0_Basic_Samples_Android_2017-05-29.tar.xz
【问题讨论】:
【参考方案1】:好的,我设法解决了这个问题 所以简单的 frame(EasyAR 中的 Frame 类)包含一个图像向量(可能是同一帧的不同图像),访问该向量会返回一个 Image 对象,该对象带有一个名为 data (字节数组)的方法,可用于初始化 Mat在opencv中
这是为任何搜索相同内容的人澄清的代码
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);
【讨论】:
以上是关于EasyAR 作为 OpenCV Mat 访问相机帧的主要内容,如果未能解决你的问题,请参考以下文章