[英]how to access a webcam that was symlinked by udev in opencv
我正在開發需要多個網絡攝像頭的應用程序。 為了確保為應用程序的每個部分使用正確的網絡攝像頭,我創建了一些udev規則,將網絡攝像頭SYMLINK到特定名稱,具體取決於序列號。
這很好用,我可以使用VLC和各種其他應用程序以該名稱訪問相機。
但是當我嘗試使用OpenCV和python以該名稱(或linux給出的非syminked名稱)訪問攝像機時,我無法從攝像機讀取幀並且我的程序掛起。 相機已成功打開。 我用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;
}
我得到了Opened...
和Trying...
消息,但沒有Got
消息。
有關如何解決此問題的任何想法?
(這都是linux btw)。
謝謝
我想通了。 當我在VLC中打開捕獲時,我注意到它將文件名與v4l2://
。 當我在我的應用程序中做同樣的事情時,它工作了!
因此,要在上面引用, "/dev/my_custom_name"
應該變為"v4l2:///dev/my_custom_name"
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.