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

标签 opencv image-processing rgb yuv

我正在尝试使用 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;
}

Do I need to convert the Mat into char again?*

不,Mat mrgb 是 dest 的包装器,按照您的安排方式,RGBA 数据将直接写入 dest 缓冲区。

关于opencv - 使用 OpenCV 从 YUV 颜色空间转换为 RGB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25666120/

相关文章:

java - opencv java修改像素值

c# - EmguCV FindFundamentalMat - 输入参数

python - 使用修正的Hausdorff距离查找形状

image-processing - 图像处理-实现Sobel滤波器

python - 在 Python (OpenCV) 中使用霍夫线变换从模拟时钟读取时间

opencv - 我下载了用于处理的 OpenCV 库,但无法运行示例

ios - GPU 内存因 GPUImage 而崩溃

javascript - 具有正态分布的随机颜色偏差

java - 调色板算法输出从红色到蓝色的颜色网格

html - 如何使用变量设置 div 的背景颜色?