使用OpenCV从YUV颜色空间转换为RGB

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用OpenCV从YUV颜色空间转换为RGB相关的知识,希望对你有一定的参考价值。

我正在尝试使用OpenCV将YUV图像转换为RGB。我是一个完整的新手。我创建了一个函数,它将YUV图像作为源并将其转换为RGB。它是这样的:

void ConvertYUVtoRGBA(const unsigned char *src, unsigned char *dest, int width, int height)
{
    cv::Mat myuv(height + height/2, width, CV_8UC1, &src);
    cv::Mat mrgb(height, width, CV_8UC4, &dest);

    cv::cvtColor(myuv, mrgb, CV_YCrCb2RGB);
    return;
}

这有用吗?我是否需要将Mat转换为char *?我很遗憾,任何帮助都将不胜感激。

答案

你的问题中没有足够的细节给出一定的答案,但下面是我最好的猜测。我假设您想要RGBA输出(不是RGB,BGR或BGRA)并且您的YUV是yuv420sp(因为这是android相机出来的,它与您的Mat尺寸一致)

void ConvertYUVtoRGBA(const unsigned char *src, unsigned char *dest, int width, int height)
{
    //cv::Mat myuv(height + height/2, width, CV_8UC1, &src);
    cv::Mat myuv(height + height/2, width, CV_8UC1, src); // pass buffer pointer, not its address
    //cv::Mat mrgb(height, width, CV_8UC4, &dest);
    cv::Mat mrgb(height, width, CV_8UC4, dest);

    //cv::cvtColor(myuv, mrgb, CV_YCrCb2RGB);
    cv::cvtColor(myuv, mrgb, CV_YUV2RGBA_NV21);  // are you sure you don't want BGRA?
    return;
}

我是否需要将Mat转换为char?*

没有Mat mrgb是dest的包装器,并且你安排它的方式,RGBA数据将直接写入dest缓冲区。

以上是关于使用OpenCV从YUV颜色空间转换为RGB的主要内容,如果未能解决你的问题,请参考以下文章

rgb颜色 红色 转换成yuv颜色空间是啥

使用 OpenCV 从 android Camera2 将 YUV 转换为 RGB ImageReader 时出现问题,输出图像为灰度

OpenCV for Android:使用 Imgproc.cvtColor 将相机预览从 YUV 转换为 RGB

FFmpeg入门详解之121:颜色空间转换RGB和YUV的原理与实战

如何将rgb 模式转换成 yuv 模式

RGB、CMY、CMYK、YUV、HSV、HSI、LAB颜色空间详解