微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

无法在 Jetson Xavier 的 python 中使用 OpenCV 捕获视频

如何解决无法在 Jetson Xavier 的 python 中使用 OpenCV 捕获视频

我正在尝试在 Jetson Xavier (ubuntu 18) 上读取相机图像。我正面临一个问题。当我运行以下代码时,它会发出警告并显示黑色(完整)图像。

[ WARN:0] global /home/nvidia/host/build_opencv/nv_opencv/modules/videoio/src/cap_gstreamer.cpp (933) 打开 OpenCV | GStreamer 警告:无法查询视频位置:状态=0,值=-1,持续时间=-1

cam=cv2.VideoCapture(0)
if cam.isOpened():
    grab,img = cam.read()
    if grab is True:
        cv2.imshow('sample image',img)
    else:
        print(f"Image not found")
else:
    print("Camera not openedd")
       

cv2.waitKey(0) # waits until a key is pressed
cv2.destroyAllWindows() # destroys the window showing image

如果我使用 'dev/video0' 来读取图像,即

cam=cv2.VideoCapture('dev/video0')

我收到相机未打开的警告和自定义错误消息

[ WARN:0] global /home/nvidia/host/build_opencv/nv_opencv/modules/videoio/src/cap_gstreamer.cpp (711) 打开 OpenCV | GStreamer 警告:打开垃圾箱时出错:没有元素“dev” [ WARN:0] global /home/nvidia/host/build_opencv/nv_opencv/modules/videoio/src/cap_gstreamer.cpp (480) isPipelinePlaying OpenCV | GStreamer 警告:GStreamer:尚未创建管道 相机未打开

然后我创建了 gstream 字符串并将其传递给视频捕获,如下所示。 字符串如下

gstr = 'varguscamerasrc ! video/x-raw(memory:NVMM),width=(int)1920,height=(int)1080,format=(string)NV12,framerate=(fraction)60/1 ! nvvidconv flip-method=0 ! video/x-raw,width=(int)1280,height=(int)720,format=(string)BGRx ! videoconvert ! video/x-raw,format=(string)BGR ! appsink'

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

我收到以下错误

Error generated. /dvs/git/dirty/git-master_linux/multimedia/nvgstreamer/gst-nvarguscamera/gstnvarguscamerasrc.cpp,execute:645 No cameras available

(python3:15402): GStreamer-CRITICAL **: 19:08:54.835: gst_mini_object_set_qdata: assertion 'object != NULL' Failed
[ 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
Traceback (most recent call last):

我是 jetson 的新手,请指导我。谢谢

解决方法

您可以尝试以下代码。还要确保您已从源代码安装 OpenCV,而不是使用 pip,因为当您从 pip 安装 OpenCV 时,Jetson Nano 和 Xavier 会出现一些问题。

import numpy as np
import cv2

cap = cv2.VideoCapture(0)

while(True):
    # Capture frame-by-frame
    ret,frame = cap.read()

    # Our operations on the frame come here
    gray = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)

    # Display the resulting frame
    cv2.imshow('frame',gray)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# When everything done,release the capture
cap.release()
cv2.destroyAllWindows()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。