как получить доступ к веб-камере, которая была обозначена udev в opencv

Я разрабатываю приложение, которое требует нескольких веб-камер. Чтобы убедиться, что для каждой части приложения используется правильная веб-камера, я создал несколько правил udev, которые SYMLINK позволяют веб-камере использовать определенное имя в зависимости от серийного номера.

Это прекрасно работает, и я могу получить доступ к камере с таким именем, используя VLC и множество других приложений.

Но когда я пытаюсь получить доступ к камере с этим именем (или несимвольным именем, данным linux), используя OpenCV и python, я не могу прочитать кадр с камеры, и моя программа зависает. Камера успешно открыта. Я создал пример приложения на C ++, чтобы проверить, не является ли это ошибкой, связанной с python / opencv, но то же самое происходит и в C ++.

Вот мое тестовое приложение C ++, которое не работает:

#include <iostream>
#include <opencv2/opencv.hpp>

using namespace std;
using namespace cv;

int main (int argc, const char * argv[])
{
VideoCapture cap("/dev/my_custom_name");
if (!cap.isOpened())
return -1;

cout << "Opened..." << endl;

Mat img;
namedWindow("video capture", CV_WINDOW_AUTOSIZE);
while (true)
{
cout << "Trying..." << endl;
cap >> img;
cout << "Got" << endl;
imshow("video capture", img);
if (waitKey(10) >= 0)
break;
}
return 0;
}

Я получаю Opened... а также Trying... сообщения, но не Got сообщение.

Любые идеи о том, как решить эту проблему?

(Это все на Linux, кстати).

Спасибо

3

Решение

Я понял это. Когда я открыл перехват в VLC, я заметил, что перед именем файла стоит v4l2://, Когда я сделал то же самое в моем приложении, это сработало!

Так что для ссылки выше, "/dev/my_custom_name" должен стать "v4l2:///dev/my_custom_name",

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]