我正在使用EasyAR在Android上使用C ++& amp;来开发应用程序。我正在尝试使用opencv,我想要实现的是:将从相机获得的easyAR帧作为Mat并使用opencv进行一些处理,然后返回帧进行查看。
为什么这么做?简单地说,我只是在EasyAR相机框架跨平台访问之后(我认为它真的很快,我只是建立了示例HelloAR)
示例HelloAR中的,有一行 auto frame = streamer-> peek();
有没有办法将其转换为在openCV中使用?
在IOS和IOS中,有另一种从c ++访问相机帧的方法。 Android(Min API 16)?
感谢您的帮助,谢谢。
这里是示例链接,我正在使用HelloAR http://s3-us-west-2.amazonaws.com/easyar/sdk/EasyAR_SDK_2.0.0_Basic_Samples_Android_2017-05-29.tar.xz
答案 0 :(得分:0)
好的,我设法找到了解决方案 所以简单的框架(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);