У меня есть карта захвата телевидения, в которой есть канал в формате YUV.Я видел другие посты, похожие на этот вопрос, и пытался попробовать все возможные методы, но ни один из них не дал четкого изображения.На данный момент наилучшие результаты были получены при вызове функции OpenCV cvCvtColor(scr, dst, CV_YUV2BGR)
.
В настоящее время я не знаю формат YUV и, честно говоря, меня немного смущает, так как в нем хранятся 4 канала, нотолько 3?Я включил изображение с карты захвата, чтобы надеяться, что кто-то может понять, что, возможно, происходит, что я мог бы использовать для заполнения пробелов.
Фид приходитчерез карту DeckLink Intensity Pro и доступ к ней в приложении C ++ при использовании OpenCV в среде Windows 7.
Обновление
Я смотрел статью в Википедии об этоминформация и попытался использовать формулу в моем приложении.Ниже приведен блок кода с полученным из него выводом.Любой совет с благодарностью.
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);
}