Przechwytywanie 1080p przy 30 klatkach na sekundę z logitecha c920 z openCV 2.4.3

Próbuję przechwycić strumień wideo z mojego Logitecha C920 w OpenCV. Dzięki Labview mogę uzyskać dostęp do strumienia MJPG z prędkością 30 klatek na sekundę 1080p. W opencv jestem ograniczony do 5fps lub 640x480.

Oto kod odnoszący się do ustawień kamery:

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'));

Wszystkie one zwracają 1, ale otrzymuję strumień o prędkości 5 klatek na sekundę 1080p, który odpowiada strumieniowi YUY2.
Jeśli dodam następujący wiersz:

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

Zwraca to 0. Dostaję strumień 30 fps przy 640x480. Dla mnie wygląda na to, że ustawienie MJPG nie jest akceptowane, ale nie wiem, co robić lub jak to naprawić.

EDYCJA: Następujące awarie programu.

 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;

W moim kodzie uruchomienia mam następujące:

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: Rozwiązanie polega na ustawieniu kodeka fourCC przed ustawieniem wysokości i szerokości kamery.

questionAnswers(3)

yourAnswerToTheQuestion