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