【问题标题】:Open USB Camera using OpenCV使用 OpenCV 打开 USB 相机
【发布时间】:2019-06-16 00:23:53
【问题描述】:

我想在 Linux Mint 18.3 上使用 C++ 中的 OpenCV 打开 USB 摄像头。

相机已插入并与 Common Vision Blocks 的 SoftwareSuite 配合使用。

从命令lsusb 我得到以下输出:

Bus 002 Device 005: ID 1ab2:0001  
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 002: ID 0cf3:e300 Atheros Communications, Inc. 
Bus 001 Device 003: ID 1bcf:2b95 Sunplus Innovation Technology Inc. 
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

第一个条目似乎是摄像头,因为如果拔下摄像头,则该条目不存在。但我不明白为什么没有显示名称。

然后我在网上发现USB摄像头是在路径下找到的: /dev/v4l/by-id/ or /dev/v4l/by-path//dev/v4l/by-id/ 的条目是:

usb-CNFEH73N3462520017B2_Integrated_Webcam_HD-video-index0

/dev/v4l/by-path/ 的条目是:

pci-0000:00:14.0-usb-0:12:1.0-video-index0

所以我想用 OpenCV 打开它:

VideoCapture 
cap("/dev/v4l/by-id/usb-CNFEH73N3462520017B2_Integrated_Webcam_HD-video-index0");

我使用 Clion 作为 IDE 并以 root 身份正常运行,但在这两种情况下我都会收到以下错误:

GStreamer Plugin: Embedded video playback halted; module source reported: Could not read from resource.
OpenCV Error: Unspecified error (GStreamer: unable to start pipeline) in cvCaptureFromCAM_GStreamer
/opencv-3.0.0/modules/videoio/src/cap_gstreamer.cpp, line 773 terminate called after throwing an instance of 'cv::Exception'

如何打开 USB 摄像头并使用dev/v4l/ 以正确的方式打开它?

【问题讨论】:

    标签: c++ linux opencv camera usb


    【解决方案1】:

    您应该通过 int id 打开设备。尝试:

    VideoCapture cap(0);
    

    事实上,传递一个字符串 OpenCV 期望打开一个播放文件,例如一个 MPEG 文件,如documentation 中所述。

    这是可行的,但问题是打开的摄像头是集成摄像头,lsusb 报告为:

    Bus 001 Device 003: ID 1bcf:2b95 Sunplus Innovation Technology Inc. 
    

    实际上是/dev/video0,链接:

    /dev/v4l/by-path/pci-0000:00:14.0-usb-0:12:1.0-video-index0
    

    而不是将lsusb 条目列为:

    Bus 002 Device 005: ID 1ab2:0001  
    

    这是外接摄像头,似乎无法识别为 V4L 设备。我不知道“Common Vision Blocks 的 SoftwareSuite”,所以我不知道这个软件是否能够作为 RAW 设备使用。

    【讨论】:

    • 感谢您的回答。使用 > VideoCapture 上限(0);我打开我的网络摄像头,如果我尝试使用其他 ID,例如 id = 1,则会显示以下错误。 > 视频错误:V4L:索引 1 不正确!并且程序默认打开我的网络摄像头。因为在互联网上我也发现,你可以打开 id = 1 的 USB 摄像头,但它只能工作 id = 0
    • id=0 代表第一个网络摄像头(/dev/video0,应该是 /dev/v4l/by-id/usb-CNFEH73N3462520017B2_Integrated_Webcam_HD-video-index0 所链接的)。由于您的 lsusb 似乎没有其他网络摄像头,因此您没有 id=1 的设备是正常的。
    • 谢谢,但是相机可以与 CVB 一起使用,并且这个条目 Bus 002 Device 005: ID 1ab2:0001 显示的 lsusb 仅在相机插入时才存在。但是我怎样才能访问 USB凸轮?
    • id=0 是第一个独立于它在 USB 总线中的枚举位置的网络摄像头。如果您只有一台相机,则 OpenCV 的编号为 0。如果你有两个,它们是 01,用于 OpenCV。我不明白。你安装了多少个摄像头??
    • 我有两个摄像头。首先是我的集成网络摄像头,第二个是通过 USB 插入的。我想用 open cv 打开 USB 相机
    猜你喜欢
    • 2013-06-14
    • 1970-01-01
    • 2019-01-07
    • 1970-01-01
    • 2020-05-23
    • 1970-01-01
    • 2019-12-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多