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.