nvgstcapture 与 nvarguscamerasrc

nvgstcapture vs nvarguscamerasrc

我为我的 OpenCV 项目购买了 CSI 相机 IMX219。

当我运行下面的命令时,实时显示帧似乎完全没有延迟。

$ nvgstcapture-1.0 -m 2 --prev-res 4

但是,当我 运行 我的简单 python 代码使用下面的流水线时,捕获速度非常慢,

pipeline = 'nvarguscamerasrc !  video/x-raw(memory:NVMM), width=1920, height=1080, format=NV12, framerate=30/1 ! nvvidconv flip-method=0 ! video/x-raw, width=1920, height=1080, format=BGRx ! videoconvert ! video/x-raw, format=BGR ! appsink'

cap = cv2.VideoCapture(pipeline, cv2.CAP_GSTREAMER)

Opencv中需要1920x1080, 30fps VideoCapture()怎么办?

感谢您的帮助!

这是我在 NVIDIA 开发者论坛上提出的一个类似问题:https://forums.developer.nvidia.com/t/optimizing-opencv-gstreamer-with-mipi-and-usb-uvc-cameras/123665/27

基本上,问题是您在 OpenCV 的 gstreamer 管道中失去了很多硬件加速。 videoconvert 特别是在管道中非常慢。根据我的应用程序的性质,我使用 nvvidconv 从 BGRx 转换为 I420。 OpenCV 无法处理 BGRx,但它可以执行 I420,我将其转换为 BGR,以便在我的应用程序的后续部分进行处理。 appsink 在他们的设备上也很慢,您没有其他接收器选择。

如果您需要恒定的实时帧,我建议使用 libargus API,因为它可能具有 NVIDIA 提供的最高性能并针对其硬件进行了优化。