python/opencv中出现错误“尚未创建管道”

3j86kqsm  于 2023-02-16  发布在  Python
关注(0)|答案(1)|浏览(356)

我正在校准摄像头,为此我使用了python语言和开放的cv库。我在Jetson Nano上使用了Waveshare IMX 219摄像头。
我尝试用摄像机捕捉图像,以便使用“VideoCapture”函数校准它们,将摄像机0的索引作为参数传递。这时出现了以下问题:
[警告:0]全局/主页/nvidia/主机/构建_开放版本/nv_开放版本/模块/视频io/src/cap_gstreamer. cpp(1757)处理消息OpenCV|GStreamer警告:嵌入式视频播放暂停;模块v4 l2 src 0报告:内部数据流错误。[警告:0]全局/home/nvidia/主机/构建_开放版本/nv_开放版本/模块/视频io/src/cap_gstreamer. cpp(886)打开OpenCV|GStreamer警告:无法启动管道[警告:0]全局/主页/nvidia/主机/构建_开放版本/nv_开放版本/模块/视频io/src/cap_gstreamer. cpp(480)正在播放OpenCV管道|GStreamer警告:GStreamer:尚未创建管道
摄像头已正确连接,并且正在被设备识别。

eiee3dmh

eiee3dmh1#

传递索引0将使用V4 L后端,或gstreamer后端的v4 l2 src插件(您的情况是后者)。问题是IMX 219是一个拜耳RG 10传感器,其原始视频不适合大多数算法需要BGR格式的opencv(其他格式可用,但取决于您的opencv版本)。
有了Jetson,路径将使用Argus,它将使用ISP进行延迟、自动调整增益、曝光、wb......,并将NV 12格式帧提供到NVMM内存中,在那里,由于插件nvarguscamerasrc,它可以在gstreamer中处理。
为了向opencv应用程序提供BGR帧,您可以首先使用Jetson的维克HW转换为BGRx,并将nvvidconv输出到系统内存中,然后使用videoconvert进行BGR。因此,管道将为:

cam_pipeline_str = 'nvarguscamerasrc sensor-id=0 ! video/x-raw(memory:NVMM),format=NV12,width=1280,height=720,framerate=30/1 ! nvvidconv ! video/x-raw,format=BGRx ! videoconvert ! video/x-raw,format=BGR ! appsink drop=1'
cap = cv2.VideoCapture(cam_pipeline_str, cv2.CAP_GSTREAMER)
if not cap.isOpened():
   ...Error

# if you get here loop reading frames and do what you want with these...

另外请注意,默认支持一些Jetsons L4 T版本作为设备树/驱动程序将为RPi v2 IMX 219凸轮。我没有经验与Waveshare凸轮,但供应商应该提供一个SDK为他们的产品。检查您的相机供应商为您的L4 T版本。

相关问题