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