Я пытаюсь захватить поток видео с моего Logitech C920 в OpenCV. С Labview я могу получить доступ к потоку MJPG со скоростью 30 кадров в секунду 1080p. В opencv я ограничен либо 5fps, либо 640x480.
Вот код, относящийся к настройкам камеры:
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'));
Все они возвращают 1, но я получаю поток 5fps 1080p, который соответствует потоку YUY2.
Если я добавлю следующую строку:
this->camRef.set(CV_CAP_PROP_FPS, 30);
Это возвращает 0. Я получаю 30 fps поток на 640x480. Мне кажется, что настройка MJPG не принимается, но я не знаю, что делать или как это исправить.
РЕДАКТИРОВАТЬ: После этого программа выйдет из строя.
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;
Затем в моем коде запуска у меня есть следующее:
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: Решение состоит в том, чтобы установить кодек fourCC перед установкой высоты и ширины камеры.