我是使用OpenCV的新手,我试图编写一个程序来访问UDP端口上的视频流。但是,代码在运行时会不断出现分段错误。该程序只是为了显示OpenCV读入的每一帧,它适用于我的计算机上的文件。如果你能指出我做错了什么,我将不胜感激。
import cv2
import numpy as np
cap = cv2.VideoCapture("udpsrc port=5600 caps=\"application/x-rtp, format=(string)I420, width=(int)1280, height=(int)720, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, colorimetry=(string)bt709, framerate=(fraction)25/1\" ! rtph264depay ! decodebin ! appsink")
while(cap.isOpened()):
print "loop"
ret, frame = cap.read()
print "ret, frame"
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
print "gray"
cv2.imshow('frame', gray)
print "imshow"
if cv2.waitKey(40) & 0xFF == ord('q'):
print "breaking"
break
cap.release()
cv2.destroyAllWindows()
输出结果为:
环 ret,框架 灰色 imshow 环 分段错误(核心转储)
运行:
gst-launch-1.0 -e udpsrc port=5600 caps="application/x-rtp, format=(string)I420, width=(int)1280, height=(int)720, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, colorimetry=(string)bt709, framerate=(fraction)25/1" ! rtph264depay ! decodebin ! avimux ! filesink location=/home/lab/Desktop/test.avi
终端中的工作正常,所以我不确定接下来要看什么。
感谢您的帮助。
编辑: 正如Samer Tufail所建议的,我尝试添加:
if cap.set(3, 1280)==True:
print "width set"
else:
print "error width"
sys.exit()
if cap.set(4, 720)==True:
print "height set"
else:
print "error height"
sys.exit()
介于" cap = cv2.VideoCapture()... while(cap.isOpened())"。但是,它现在给出了一个不同的错误(我尝试使用和不使用== True)。
GStreamer插件:嵌入式视频播放暂停;模块udpsrc0报告:内部数据流错误。 OpenCV错误:未指定错误(GStreamer:无法启动管道 )在icvStartPipeline中,文件/home/lab/Sam/OpenCV/opencv/modules/videoio/src/cap_gstreamer.cpp,第407行 Traceback(最近一次调用最后一次): 文件" OpenCV_Gst.py",第9行,in 如果cap.set(3,1280)== True: cv2.error:/home/lab/Sam/OpenCV/opencv/modules/videoio/src/cap_gstreamer.cpp:407:错误:( - 2)GStreamer:无法启动管道 在函数icvStartPipeline
中答案 0 :(得分:-1)
当我这样做时,我解决了同样的问题:
cap = cv2.VideoCapture("udpsrc port=5600 caps=\"application/x-rtp,
format=(string)I420, width=(int)1280, height=(int)720,
pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive,
colorimetry=(string)bt709, framerate=(fraction)25/1\" ! rtph264depay !
videoconvert ! decodebin ! appsink")
有效。