Jetson Nano摄像头Python读取失败:问题排查与解决方法
问题分析与解决
你的Python代码无法调用摄像头的核心问题有两个:
- 代码里用的是
videotestsrc(测试视频源),并非实际调用Jetson Nano摄像头的nvarguscamerasrc - GStreamer管道没有适配Jetson的硬件加速格式,也没有转换成OpenCV能识别的图像格式
正确的解决方案
替换代码中的GStreamer管道,使用适配Jetson硬件的摄像头源和格式转换逻辑,完整代码如下:
import sys import cv2 def read_cam(): # 适配Jetson Nano的GStreamer管道:调用摄像头硬件加速源,转成OpenCV支持的BGR格式 G_STREAM_TO_SCREEN = ( "nvarguscamerasrc ! " "video/x-raw(memory:NVMM),width=1280,height=720,framerate=30/1,format=NV12 ! " "nvvidconv flip-method=0 ! " "video/x-raw,format=BGRx ! " "videoconvert ! " "video/x-raw,format=BGR ! " "appsink" ) cap = cv2.VideoCapture(G_STREAM_TO_SCREEN, cv2.CAP_GSTREAMER) if cap.isOpened(): cv2.namedWindow("demo", cv2.WINDOW_AUTOSIZE) while True: ret_val, img = cap.read() if not ret_val: break cv2.imshow('demo', img) # 按q退出循环 if cv2.waitKey(1) & 0xFF == ord('q'): break else: print("Unable to use pipeline") cap.release() cv2.destroyAllWindows() if __name__ == '__main__': read_cam()
管道各部分说明
nvarguscamerasrc:Jetson平台专用的摄像头硬件加速采集源,对应你之前成功的gst命令中的源video/x-raw(memory:NVMM)...:指定采集的分辨率、帧率和NV12格式(硬件加速内存中的格式)nvvidconv flip-method=0:使用硬件加速的格式转换器,flip-method可根据摄像头安装方向调整(0-6可选)video/x-raw,format=BGRx:转成BGRx格式,再通过videoconvert转成OpenCV默认的BGR格式appsink:将视频帧输出给OpenCV的VideoCapture读取
额外检查项
- 确保你的OpenCV是编译时支持GStreamer的(Jetson官方镜像中的OpenCV默认已支持)
- 运行代码时不要有其他程序占用摄像头(比如之前的gst-launch命令要先关闭)
- 若仍有问题,可尝试降低分辨率(比如640x480)测试
内容的提问来源于stack exchange,提问作者e.iluf
相关产品推荐
相关产品推荐

