Próbuję uchwycić strumień wideo z mojego Logitech C920 w OpenCV. Dzięki Labview mogę uzyskać dostęp do strumienia MJPG z prędkością 30 fps 1080p. W opencv jestem ograniczony do 5fps lub 640x480.Przechwytywanie 1080p przy 30 fps z logitech c920 z openCV 2.4.3
Oto odpowiedni kod 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'));
Te wszystkie powrót 1, jeszcze mam strumienia 5fps 1080p, która odpowiada strumienia YUY2.
Jeśli dodać następujący wiersz:
this->camRef.set(CV_CAP_PROP_FPS, 30);
to zwraca 0. uzyskać strumień 30 fps przy 640x480. Dla mnie wygląda na to, że ustawienie MJPG nie jest akceptowane, ale nie wiem, co zrobić i jak to naprawić.
EDYCJA: Następujące awarie powodują awarię 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;
Wtedy w moim kodu run 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 jest ustawiony kodek FourCC przed ustawieniem kamery wysokość i szerokość.
jeśli chcesz ustawić fps (musi być obsługiwany przez kamerę), trzeba to zrobić po kodeka ustawienie, ale przed szerokość/ustawienia wysokości – MartinM
Wygląda na to, że EDIT2 dało 1080p przy 30 klatkach na sekundę. Powinien zostać przekształcony w odpowiedź i zaakceptowany, aby problem został rozwiązany. –