簡體   English   中英

如何訪問由opencv中的udev符號鏈接的網絡攝像頭

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM