c++ - 在 OpenCV 中将 YUV 转换为 BGR 或 RGB

标签 c++ windows opencv video-streaming

我有一个电视采集卡,它有一个以 YUV 格式输入的信号。我在这里看到了与此问题类似的其他帖子,并尝试尝试所有可能的方法,但它们都没有提供清晰的图像。目前最好的结果是使用 OpenCV cvCvtColor(scr, dst, CV_YUV2BGR) 函数调用。

我目前不知道 YUV 格式,说实话让我有点困惑,因为它看起来存储了 4 个 channel ,但实际上只有 3 个?我附上了采集卡中的一张图片,希望有人能理解可能发生的事情,我可以用它来填补空白。

YUV to BGR converted image

提要通过 DeckLink Intensity Pro 卡进入,并在 Windows 7 环境中使用 OpenCV 在 C++ 应用程序中访问。

更新

我查看了有关此信息的维基百科文章,并尝试在我的应用程序中使用该公式。下面是代码块,其中包含从中接收到的输出。非常感谢任何建议。

BYTE* pData;

    videoFrame->GetBytes((void**)&pData);

    m_nFrames++;

    printf("Num Frames executed: %d\n", m_nFrames);

    for(int i = 0; i < 1280 * 720 * 3; i=i+3)
    {
        m_RGB->imageData[i] = pData[i] + pData[i+2]*((1 - 0.299)/0.615);
        m_RGB->imageData[i+1] = pData[i] - pData[i+1]*((0.114*(1-0.114))/(0.436*0.587)) - pData[i+2]*((0.299*(1 - 0.299))/(0.615*0.587));
        m_RGB->imageData[i+2] = pData[i] + pData[i+1]*((1 - 0.114)/0.436);
    }

Attempted RGB conversion

最佳答案

OPENCV 的较新版本中,有一个内置函数可用于将 YUV 转换为 RGB

cvtColor(src,dst,CV_YUV2BGR_YUY2);

在下划线后指定YUV格式,像这样CV_YUYV2BGR_xxxx

关于c++ - 在 OpenCV 中将 YUV 转换为 BGR 或 RGB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7954416/

相关文章:

c++ - 如何在 C++ 中格式化?

c# - 使用 windbg 调试 .NET 转储

java - Testcontainers - 容器正确启动,但 Junit 测试未在 Windows 上启动(可能自 1909 更新以来)

c++ - 使用 OpenCV 在网络摄像头上绘图

c# - 如何将二进制文件头示例代码(C++/C#)转换为Python?

c++ - 面试问题中的这个位操作代码有什么问题?

windows - 什么是dll劫持?

python - 在Google map 图像(航空图像)中检测街道区域的简单方法

OpenCV的cvtColor抛出异常: Invalid number of channels in input image

c++ - 在 C++ 中制作一个只有可变属性的类是不好的做法吗?