'Open USB Camera using OpenCV

I want to open a USB camera with OpenCV in C++ operating on Linux Mint 18.3.

The Camera is plugged in and works fine with the SoftwareSuite by Common Vision Blocks.

From command lsusb I got the following output:

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

The first entry seems to be the camera because the entry doesn't exist if the camera is unplugged. But I don't understand why there isn't a name shown.

Then I found on the internet that the USB camera is found under the path: /dev/v4l/by-id/ or /dev/v4l/by-path/. The entry for /dev/v4l/by-id/ is:

usb-CNFEH73N3462520017B2_Integrated_Webcam_HD-video-index0

and the entry for /dev/v4l/by-path/ is:

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

So I want to open it with OpenCV by using:

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

I use Clion as an IDE and run it normally as root, but in both cases I get the following error:

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'

How can I open the USB camera and being on the right way to open it with dev/v4l/?



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source