在Ubuntu上运行OpenCV时,GStreamer警告



我正试图在我的树莓派(Ubuntu系统(上运行一个脚本。现在,我只是对opencv的基础知识进行了更新,因为我已经有一段时间没有使用它了。所以我直接从opencv网站复制粘贴了这段代码并运行了它。

import numpy as np
import cv2 as cv
cap = cv.VideoCapture(0)
if not cap.isOpened():
print("Cannot open camera")
exit()
while True:
# Capture frame-by-frame
ret, frame = cap.read()

# if frame is read correctly ret is True
if not ret:
print("Can't receive frame (stream end?). Exiting ...")
break

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

# Display the resulting frame
cv.imshow('frame', gray)

if cv.waitKey(1) == ord('q'):
break

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

只是,运行它会弹出一个灰色的窗口,并抛出以下错误:

[ WARN:0] global /usr/local/src/opencv-4.4.0/modules/videoio/src/cap_gstreamer.cpp (1761) handleMessage OpenCV | GStreamer warning: Embedded video playback halted; module v4l2src0 reported: Internal data stream error.
[ WARN:0] global /usr/local/src/opencv-4.4.0/modules/videoio/src/cap_gstreamer.cpp (888) open OpenCV | GStreamer warning: unable to start pipeline
[ WARN:0] global /usr/local/src/opencv-4.4.0/modules/videoio/src/cap_gstreamer.cpp (480) isPipelinePlaying OpenCV | GStreamer warning: GStreamer: pipeline have not been created

代码仍然运行,因为我可以通过按"q"关闭窗口。但视频流部分出现了严重的问题。我甚至不知道GStreamer是什么,更不用说GStreamer管道是什么了。我不知道如何解决这个问题,也没有在网上找到任何有效的方法。

我的代码在jetson nano 上运行

def __gstreamer_pipeline(
camera_id,
capture_width=1920,
capture_height=1080,
display_width=1920,
display_height=1080,
framerate=30,
flip_method=0,
):
return (
"nvarguscamerasrc sensor-id=%d ! "
"video/x-raw(memory:NVMM), "
"width=(int)%d, height=(int)%d, "
"format=(string)NV12, framerate=(fraction)%d/1 ! "
"nvvidconv flip-method=%d ! "
"video/x-raw, width=(int)%d, height=(int)%d, format=(string)BGRx ! "
"videoconvert ! "
"video/x-raw, format=(string)BGR ! appsink max-buffers=1 drop=True"
% (
camera_id,
capture_width,
capture_height,
framerate,
flip_method,
display_width,
display_height,
)
)

stream = cv2.VideoCapture(__gstreamer_pipeline(camera_id=0, flip_method=2), cv2.CAP_GSTREAMER)

最新更新