C++ 如何访问opencv中由udev符号链接的网络摄像头

C++ 如何访问opencv中由udev符号链接的网络摄像头,c++,python,linux,opencv,video-capture,C++,Python,Linux,Opencv,Video Capture,我正在开发一个需要多个网络摄像头的应用程序。为了确保应用程序的每个部分都使用了正确的网络摄像头,我创建了一些udev规则,根据序列号将网络摄像头符号链接到特定的名称 这非常有效,我可以使用VLC和其他各种应用程序以该名称访问相机 但是,当我尝试使用OpenCV和python以该名称(或linux提供的非符号化名称)访问相机时,我无法从相机读取帧,我的程序挂起。相机已成功打开。我在C++中创建了一个示例应用程序,测试它是否是Python/OpenCV相关的bug,但是同样的事情也发生在C++中。

我正在开发一个需要多个网络摄像头的应用程序。为了确保应用程序的每个部分都使用了正确的网络摄像头,我创建了一些udev规则,根据序列号将网络摄像头符号链接到特定的名称

这非常有效,我可以使用VLC和其他各种应用程序以该名称访问相机

但是,当我尝试使用OpenCV和python以该名称(或linux提供的非符号化名称)访问相机时,我无法从相机读取帧,我的程序挂起。相机已成功打开。我在C++中创建了一个示例应用程序,测试它是否是Python/OpenCV相关的bug,但是同样的事情也发生在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;
}
#包括
#包括
使用名称空间std;
使用名称空间cv;
int main(int argc,const char*argv[]
{
视频捕获帽(“/dev/my_custom_name”);
如果(!cap.isOpened())
返回-1;

当我在VLC中打开捕获时,我注意到它用
v4l2://
预先固定了文件名。当我在应用程序中这样做时,它工作了

因此,在上面的参考中,
“/dev/my\u custom\u name”
应该变成
“v4l2:///dev/my\u custom\u name”