Captura de 1080p a 30 fps desde logitech c920 con openCV 2.4.3
Estoy intentando capturar el flujo de video de mi Logitech C920 en OpenCV. Con Labview puedo acceder a una transmisión MJPG a 30 fps 1080p. En Opencv estoy limitado a 5fps o 640x480.
Aquí está el código relevante para la configuración de la cámara:
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 estos devuelven 1, pero obtengo un flujo de 5 fps de 1080p que corresponde al flujo de YUY2.
Si añado la siguiente línea:
this->camRef.set(CV_CAP_PROP_FPS, 30);
Esto devuelve 0. Obtengo una transmisión de 30 fps a 640x480. Para mí, parece que la configuración MJPG no se acepta, pero no sé qué hacer o cómo solucionarlo.
EDITAR: Lo siguiente bloquea el 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;
Luego en mi código de ejecución tengo lo siguiente:
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: La solución es configurar el códec fourCC antes de configurar la altura y el ancho de la cámara.