Capturando 1080p a 30fps do logitech c920 com openCV 2.4.3

Estou tentando capturar o fluxo de vídeo do meu Logitech C920 no OpenCV. Com o Labview, posso acessar um fluxo MJPG a 30fps 1080p. Na opencv estou limitado a 5fps ou 640x480.

Aqui está o código relevante para as configurações da câmera:

this->camRef.set(CV_CAP_PROP_FRAME_WIDTH, 1920);
this->camRef.set(CV_CAP_PROP_FRAME_HEIGHT, 1080);
this->camRef.set(CV_CAP_PROP_FOURCC,CV_FOURCC('M','J','P','G'));

Todos eles retornam 1, mas eu recebo um fluxo de 5fps de 1080p que corresponde ao fluxo YUY2.
Se eu adicionar a seguinte linha:

this->camRef.set(CV_CAP_PROP_FPS, 30);

Isso retorna 0. Eu recebo um fluxo de 30 fps em 640x480. Para mim, parece que a configuração do MJPG não é aceita, mas não sei o que fazer ou como corrigir isso.

EDIT: O seguinte falha o programa.

 this->camRef.read(this->image);
 std::cout<< this->camRef.get(CV_CAP_PROP_FOURCC)                            << std::endl;
 std::cout<< this->camRef.set(CV_CAP_PROP_FRAME_WIDTH, config.width)         << std::endl;
 std::cout<< this->camRef.set(CV_CAP_PROP_FRAME_HEIGHT, config.height)       << std::endl;
 std::cout<< this->camRef.set(CV_CAP_PROP_FOURCC,CV_FOURCC('M','J','P','G')) << std::endl;
 std::cout<< this->camRef.get(CV_CAP_PROP_FOURCC)                            << std::endl;

Então, no meu código de execução, tenho o seguinte:

void camera::run()
{
    while(true)
    {
        if(this->camRef.read(this->image) == 0)
        {
           if(this->capture)
            {
                cv::imwrite(fileName,this->image);
                this->count++;
            }
        }
        msleep(15);
    }
}

EDIT2: Solução é definir o codec fourCC antes de definir a altura e a largura da câmera.

questionAnswers(3)

yourAnswerToTheQuestion