Ich versuche, den Video-Stream von meinem Logitech C920 in OpenCV zu erfassen. Mit Labview kann ich auf einen MJPG-Stream mit 30fps 1080p zugreifen. In opencv bin ich auf 5fps oder 640x480 beschränkt. HierCapturing 1080p bei 30fps von Logitech c920 mit OpenCV 2.4.3
ist der Code relevant 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 alle Rückkehr 1, doch ich bekomme einen 5fps Strom von 1080p, die dem YUY2 Strom entspricht.
Wenn ich die folgende Zeile:
this->camRef.set(CV_CAP_PROP_FPS, 30);
Dieser Wert 0 zurück ich einen 30 fps Strom bei 640x480 bekommen. Für mich sieht es so aus, als ob die MJPG-Einstellung nicht akzeptiert wird, aber ich weiß nicht, was ich tun soll oder wie ich das beheben kann.
EDIT: Folgendes stürzt das Programm 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 in meinem Lauf Code habe ich 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: Lösung ist es, die fourcc Codec einstellen, bevor die Kamerahöhe und Breite einstellen.
wenn Sie fps einstellen möchten (muss von der Kamera unterstützt werden), haben Sie es nach Codec Einstellung zu tun, aber vor Breite/Höheneinstellungen – MartinM
Klingt wie Ihre EDIT2 gab Ihnen 1080p bei 30fps. Sollte in eine Antwort verwandelt werden und dann akzeptiert werden, um das Problem gelöst erscheinen zu lassen. –