gpt4 book ai didi

c++ - 如何访问由 udev 在 opencv 中链接的网络摄像头

转载 作者:太空狗 更新时间:2023-10-29 23:07:24 25 4
gpt4 key购买 nike

我正在开发一个需要多个网络摄像头的应用程序。为了确保应用程序的每个部分都使用正确的网络摄像头,我创建了一些 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...Trying... 消息,但没有收到 Got 消息。

关于如何解决这个问题有什么想法吗?

(顺便说一句,这都是在 linux 上)。

谢谢

最佳答案

我想通了。当我在 VLC 中打开捕获时,我注意到它以 v4l2:// 作为文件名的前缀。当我在我的应用程序中执行相同操作时,它成功了!

因此引用上面的内容,"/dev/my_custom_name" 应该变成 "v4l2:///dev/my_custom_name"

关于c++ - 如何访问由 udev 在 opencv 中链接的网络摄像头,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12959150/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com