【问题标题】:EasyAR access Camera Frames as OpenCV MatEasyAR 作为 OpenCV Mat 访问相机帧
【发布时间】:2017-09-10 03:12:15
【问题描述】:

我正在使用 EasyAR 在 android 上使用 C++ 开发应用程序,我正在尝试使用 opencv,我想要实现的是:获取从相机获取的 easyAR 帧作为 Mat 并执行使用 opencv 进行一些处理,然后返回要查看的帧。

为什么要这么做?索性我只是在EasyAR摄像头框架跨平台接入之后(我觉得真的很快,我刚建了样例HelloAR)

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

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

  2. 在 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

【问题讨论】:

    标签: c++ opencv augmented-reality


    【解决方案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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-03-06
      • 2011-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多