【发布时间】:2011-10-31 13:30:30
【问题描述】:
我有一个电视采集卡,它有一个 YUV 格式的提要。我在这里看到了与此问题类似的其他帖子,并尝试尝试说明的所有可能方法,但它们都没有提供清晰的图像。目前最好的结果是使用 OpenCV cvCvtColor(scr, dst, CV_YUV2BGR) 函数调用。
我目前不知道 YUV 格式,老实说让我有点困惑,因为它看起来像存储 4 个通道,但只有 3 个?我已经包含了捕获卡中的图像,希望有人能理解我可以用来填补空白的可能发生的事情。
提要通过 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);
}
【问题讨论】:
-
"我目前不知道 YUV 格式" --> 维基百科。阅读它:en.wikipedia.org/wiki/YUV#Conversion_to.2Ffrom_RGB
-
感谢您链接该文章,但我是否假设我将使用 y、u、v 和 y1 并使用这些变量来生成 RGB 等效项?另外,我是否必须创建 4 个不同的数组来接收每个单独的值集以将它们合并在一起?
-
您只需要 3 个数组,因为 RGB 中有 3 个颜色分量。但是,是的,您基本上需要单独计算颜色分量并将它们存储在某个地方。
标签: c++ windows opencv video-streaming