【问题标题】:OpenCV returns no error when open is called, but gstreamer does调用 open 时,OpenCV 不会返回错误,但 gstreamer 会
【发布时间】:2022-01-12 02:17:00
【问题描述】:

当我使用 GStreamer 打开相机时遇到问题,但相机未连接,我没有从 OpenCV 收到错误代码。 GStreamer 在控制台中返回错误。当我检查相机是否以.isOpend() 打开时,返回值为true。连接相机后,它可以正常工作。

   std::string pipeline = "nvarguscamerasrc sensor_id=0 ! video/x-raw(memory:NVMM), width=(int)3264, height=(int)2464, format=(string)NV12, framerate=(fraction)21/1 ! nvvidconv flip-method=2 ! video/x-raw, width=(int)3264, height=(int)2464, format=(string)BGRx ! videoconvert ! video/x-raw, format=(string)BGR ! appsink"

   cap_device_.open(pipeline, cv::CAP_GSTREAMER);
   bool err = cap_device_.isOpened();
   if (!err) {
     printf("Not possible to open camera");
     return EXIT_FAILURE;
   }

控制台中的GStreamer错误代码为:

(Argus) Error Timeout:  (propagating from src/rpc/socket/client/SocketClientDispatch.cpp, function openSocketConnection(), line 219)
(Argus) Error Timeout: Cannot create camera provider (in src/rpc/socket/client/SocketClientDispatch.cpp, function createCameraProvider(), line 106)
Error generated. /dvs/git/dirty/git-master_linux/multimedia/nvgstreamer/gst-nvarguscamera/gstnvarguscamerasrc.cpp, execute:720 Failed to create CameraProvider
[ WARN:0] global /home/nvidia/host/build_opencv/nv_opencv/modules/videoio/src/cap_gstreamer.cpp (933) open OpenCV | GStreamer warning: Cannot query video position: status=0, value=-1, duration=-1

如果我理解一切正确,.isOpend() 应该返回 false。如果没有,如何检查管道是否初始化正确?

我的系统在带有 MIPI-CSI 摄像头的 Nvidia Jetson Nano 上运行 Ubuntu 18.04。 GStreamer 1.14.5 版,OpenCV 4.1.1 版

【问题讨论】:

  • AFAIK 最简单的方法是尝试捕获图像

标签: c++ opencv gstreamer nvidia-jetson-nano


【解决方案1】:

这可能只是因为一个错字。 nvarguscamerasrc 没有属性 sensor_id 但有 sensor-id。修复此问题后它应该可以工作。

在不工作的情况下,cap.read() 应该返回 false。

【讨论】:

  • 我现在在cap.isOpend() 调用之后添加了一个cap.read()。如果 GStreamer 无法正确打开管道,则 cap.read() 返回 false。这是一种实用的解决方法。
猜你喜欢
  • 2013-05-26
  • 1970-01-01
  • 2019-12-06
  • 2013-06-14
  • 1970-01-01
  • 2021-03-09
  • 2011-12-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多