Sto provando a catturare lo streaming video dal mio Logitech C920 in OpenCV. Con Labview posso accedere a un flusso MJPG a 30 fps 1080p. In opencv sono limitato a 5fps o 640x480.Cattura 1080p a 30fps da logitech c920 con openCV 2.4.3
Ecco il codice rilevante per le impostazioni della fotocamera:
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'));
Questi tutti di ritorno 1, ma io ottenere un flusso di 5 fps 1080p che corrisponde al flusso YUY2.
Se posso aggiungere la seguente riga:
this->camRef.set(CV_CAP_PROP_FPS, 30);
Questo restituisce 0. ottengo un flusso di 30 fps a 640x480. Per me sembra che l'impostazione MJPG non sia accettata, ma non so cosa fare o come risolverlo.
MODIFICA: il seguente arresta il programma.
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;
Poi nel mio codice run ho il seguente:
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: Soluzione è quella di impostare il codec FOURCC prima di impostare l'altezza e la larghezza della macchina fotografica.
se si desidera impostare fps (deve essere supportato dalla fotocamera), è necessario farlo dopo impostazione codec, ma prima di larghezza/impostazioni altezza – MartinM
Sembra che il tuo EDIT2 ti abbia dato 1080p a 30 fps. Dovrebbe essere trasformato in una risposta e accettato quindi per far sembrare il problema risolto. –