【问题标题】:Android NDK converting YUV420 AIMAGE to RGBAndroid NDK 将 YUV420 AIMAGE 转换为 RGB
【发布时间】:2021-04-13 10:28:15
【问题描述】:

我正在使用 NDK CAMERA2 API 流式传输相机帧。我的 AIMAGE_READER 的格式是 YUV420;但是我想将其转换为 RGB。我查找了一些执行相同操作的 Java 示例,但由于某种原因,它无法正常工作并且图像失真。

帧分辨率为 640X480。

谁能告诉我我做错了什么

void NativeCamera::previewImageCallback(void *context, AImageReader *reader)
{
    Log::Debug(TAG) << "previewImageCallback" << Log::Endl;
    AImage *previewImage = nullptr;
    auto status = AImageReader_acquireLatestImage(reader, &previewImage);

    if(status !=AMEDIA_OK)
    {
        return;
    }

    std::thread processor([=]()
                          {
                              uint8_t *dataY = nullptr;
                              uint8_t *dataU = nullptr;
                              uint8_t *dataV = nullptr;

                              int lenY = 0;
                              int lenU = 0;
                              int lenV = 0;


                              AImage_getPlaneData(previewImage, 0, (uint8_t**)&dataY, &lenY);
                              AImage_getPlaneData(previewImage, 1, (uint8_t**)&dataU, &lenU);
                              AImage_getPlaneData(previewImage, 2, (uint8_t**)&dataV, &lenV);

                              uchar buff[lenY+lenU+lenV];

                              memcpy(buff+0,dataY,lenY);
                              memcpy(buff+lenY,dataV,lenV);
                              memcpy(buff+lenY+lenV,dataU,lenU);

                              cv::Mat yuvMat(480+240,640,CV_8UC1,&buff);
                              cv::Mat rgbMat;
                              cv::cvtColor(yuvMat,rgbMat,cv::COLOR_YUV2RGB_NV21,3);

                               //colorBuffer defined elsewhere
                               memcpy((char*)colorBuffer,rgbMat.data,640*480*3);


【问题讨论】:

  • 预期的和实际的图像可能会有所帮助
  • @AlanBirtles 这些是来自相机的实时帧,但我添加了我手机的屏幕截图以显示它的样子。

标签: android c++ opencv android-ndk


【解决方案1】:

这是因为 YUV420p 格式每 4 个像素有 6 个字节,但 RGB 有每 4 个像素有 12 个字节。所以你必须先重新打包你的数组, cv::cvtColor - 不这样做。检查here关于YUV420p的包装。

【讨论】:

    猜你喜欢
    • 2022-12-22
    • 2019-11-12
    • 2016-02-06
    • 2020-12-18
    • 2011-09-27
    • 2020-01-03
    • 1970-01-01
    • 2012-11-28
    • 1970-01-01
    相关资源
    最近更新 更多