Я разрабатываю приложение, которое требует нескольких веб-камер. Чтобы убедиться, что для каждой части приложения используется правильная веб-камера, я создал несколько правил 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, кстати).
Спасибо
Я понял это. Когда я открыл перехват в VLC, я заметил, что перед именем файла стоит v4l2://
, Когда я сделал то же самое в моем приложении, это сработало!
Так что для ссылки выше, "/dev/my_custom_name"
должен стать "v4l2:///dev/my_custom_name"
,
Других решений пока нет …