Erfassen von 1080p mit 30 fps von logitech c920 mit openCV 2.4.3

Ich versuche, den Videostream von meinem Logitech C920 in OpenCV aufzunehmen. Mit Labview kann ich mit 30fps 1080p auf einen MJPG-Stream zugreifen. In opencv bin ich entweder auf 5fps oder 640x480 beschränkt.

Hier ist der Code für die Kameraeinstellungen:

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

Diese geben alle 1 zurück, aber ich erhalte einen 5-fps-Stream von 1080p, der dem YUY2-Stream entspricht.
Wenn ich folgende Zeile hinzufüge:

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

Dies gibt 0 zurück. Ich erhalte einen Stream mit 30 fps bei 640x480. Für mich sieht es so aus, als würde die MJPG-Einstellung nicht akzeptiert, aber ich weiß nicht, was ich tun soll oder wie ich das beheben soll.

BEARBEITEN: Das folgende Programm stürzt ab.

 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;

Dann habe ich in meinem Ausführungscode Folgendes:

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: Die Lösung besteht darin, den FourCC-Codec einzustellen, bevor Höhe und Breite der Kamera eingestellt werden.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage