我正在开发一个需要多个网络摄像头的应用程序。为了确保应用程序的每个部分都使用正确的网络摄像头,我创建了一些 udev 规则,将网络摄像头 SYMLINK 到特定名称,具体取决于序列号。
这很好用,我可以使用 VLC 和各种其他应用程序通过该名称访问相机。
但是,当我尝试使用 OpenCV 和 python 以该名称(或 linux 给出的非符号化名称)访问相机时,我无法从相机中读取帧并且我的程序挂起。摄像头打开成功。我在 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...
andTrying...
消息,但没有收到Got
消息。
关于如何解决这个问题的任何想法?
(顺便说一句,这都是在linux上)。
谢谢