Мне нравится снимать видео с веб-камеры usb с opencv. Для этого я пытаюсь использовать класс VideoCapture с бэкэндом v4l2. Следуя примеру на https://docs.opencv.org/3.2.0/d8/dfe/classcv_1_1VideoCapture.html, я вызываю конструктор следующим образом:
VideoCapture vc(id + CAP_V4L2);
, где id обозначает мою камеру (здесь 0).
Для проверки для успеха я сделал что-то вроде этого:
cout << vc.get(CAP_PROP_MODE)<<endl; // return 0 instead of the value of CAP_V4L2
Я также обязательно скомпилирую opencv с V4L / V4L2. getBuildInformation () показывает следующую строку:
V4L / V4L2: Использование libv4l1 (версия 1.14.2) / libv4l2 (версия 1.14.2))
В настоящее время я работаю в Virtualbox 6.0 .4 с гостевой системой Ubuntu 18.04 и системой Ubuntu 18.04 в качестве хоста.
Вот минимальный пример:
int main() {
int id = 0;
VideoCapture vc(id + CAP_V4L2);
if(!vc.isOpened()) {
std::cerr << "Unable to open cam " << std::endl;
exit(-1);
}
cout << vc.get(CAP_PROP_MODE) << " | " << CAP_V4L2 <<endl; // 0 | 200
}
Я благодарен за любую помощь