Преобразование YUV в BGR или RGB в OpenCV

У меня есть карта видеозахвата, которая имеет канал, поступающий в формате YUV.Я видел здесь другие сообщения, похожие на этот вопрос, и пытался попробовать все возможные заявленные методы, но ни один из них не дал четкого изображения. На данный момент наилучшие результаты были при вызове функции OpenCV cvCvtColor (scr, dst, CV_YUV2BGR) .

В настоящее время я ничего не знаю о формате YUV и, честно говоря, меня немного смущает, так как похоже, что он хранит 4 канала, а всего 3? Я включил изображение с карты захвата, чтобы надеяться, что кто-то сможет понять, что, возможно, происходит, и я смогу заполнить пробелы.

YUV to BGR converted image

Канал поступает через карту 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);
    }

Attempted RGB conversion

11
задан Seb 31 October 2011 в 17:10
поделиться