ubuntu16.04 opencv打开摄像头失败

按照opencv检测AruCo标记教程,运行程序时打开摄像头失败,使用的相机是Intel RealSense D435。
发生问题的代码如下。

   // 打开相机
   cv::VideoCapture inputVideo;
   inputVideo.open(0);

程序运行时给出的错误提示如下。

[ WARN:0] global /home/liangbeibei/image_envirment/opencv-4.4/opencv-4.4.0/modules/videoio/src/cap_gstreamer.cpp (1761) handleMessage OpenCV | GStreamer warning: Embedded video playback halted; module v4l2src0 reported: Internal data flow error.
[ WARN:0] global /home/liangbeibei/image_envirment/opencv-4.4/opencv-4.4.0/modules/videoio/src/cap_gstreamer.cpp (888) open OpenCV | GStreamer warning: unable to start pipeline
[ WARN:0] global /home/liangbeibei/image_envirment/opencv-4.4/opencv-4.4.0/modules/videoio/src/cap_gstreamer.cpp (480) isPipelinePlaying OpenCV | GStreamer warning: GStreamer: pipeline have not been created
[ WARN:0] global /home/liangbeibei/image_envirment/opencv-4.4/opencv-4.4.0/modules/videoio/src/cap_v4l.cpp (893) open VIDEOIO(V4L2:/dev/video0): can't open camera by index

Intel RealSense D435有三个镜头,包括构成双目的两个镜头和一个彩色镜头。经过测试,opencv库打开相机时只能打开彩色镜头,打不开两个双目镜头。
open()函数的参数为0,代表打开编号为0的镜头。当编号为0的镜头是双目镜头之一时,程序就会报错。

inputVideo.open(0);

在Ubuntu系统中打开终端,输入以下命令,就可以显示出系统中有几个可用的相机。

ls /dev/video*

输出如下。

/dev/video0  /dev/video1  /dev/video2

更改open()函数中相机编号,依次实验。最终结果是,当编号为2时,相机可以打开。
最终代码如下。

   // 打开相机
   cv::VideoCapture inputVideo;
   inputVideo.open(2);
Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐