Przechwytywanie 1080p przy 30 klatkach na sekundę z logitecha c920 z openCV 2.4.3
Próbuję przechwycić strumień wideo z mojego Logitecha C920 w OpenCV. Dzięki Labview mogę uzyskać dostęp do strumienia MJPG z prędkością 30 klatek na sekundę 1080p. W opencv jestem ograniczony do 5fps lub 640x480.
Oto kod odnoszący się do ustawień kamery:
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'));
Wszystkie one zwracają 1, ale otrzymuję strumień o prędkości 5 klatek na sekundę 1080p, który odpowiada strumieniowi YUY2.
Jeśli dodam następujący wiersz:
this->camRef.set(CV_CAP_PROP_FPS, 30);
Zwraca to 0. Dostaję strumień 30 fps przy 640x480. Dla mnie wygląda na to, że ustawienie MJPG nie jest akceptowane, ale nie wiem, co robić lub jak to naprawić.
EDYCJA: Następujące awarie programu.
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;
W moim kodzie uruchomienia mam następujące:
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: Rozwiązanie polega na ustawieniu kodeka fourCC przed ustawieniem wysokości i szerokości kamery.