У меня есть карта видеозахвата, которая имеет канал, поступающий в формате 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);
}