分段错误OpenCV cap.read udp流Python
我不熟悉使用OpenCV,我正在尝试编写一个程序来访问UDP端口上的视频流。但是,当我运行代码时,它总是给出一个分段错误。这个程序只是用来显示OpenCV读取的每一帧,它在我的计算机上的文件上工作。如果你能指出我做错了什么,我将不胜感激分段错误OpenCV cap.read udp流Python,python,opencv,segmentation-fault,udp,gstreamer,Python,Opencv,Segmentation Fault,Udp,Gstreamer,我不熟悉使用OpenCV,我正在尝试编写一个程序来访问UDP端口上的视频流。但是,当我运行代码时,它总是给出一个分段错误。这个程序只是用来显示OpenCV读取的每一帧,它在我的计算机上的文件上工作。如果你能指出我做错了什么,我将不胜感激 import cv2 import numpy as np cap = cv2.VideoCapture("udpsrc port=5600 caps=\"application/x-rtp, format=(string)I420, width=(int)1
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()
输出为:
环路
框架网
灰色
显示图像
环
分段故障(堆芯转储)
运行:
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()…而(cap.isOpened())”之间。但是,现在它给出了一个不同的错误(我尝试了使用==True和不使用==True)
GStreamer插件:嵌入式视频播放暂停;模块udpsrc0报告:内部数据流错误。
OpenCV错误:未指定的错误(GStreamer:无法启动管道
)在icvStartPipeline中,文件/home/lab/Sam/OpenCV/OpenCV/modules/videoio/src/cap_gstreamer.cpp,第407行
回溯(最近一次呼叫最后一次):
文件“OpenCV_Gst.py”,第9行,在
如果cap.set(31280)=真:
cv2.error:/home/lab/Sam/OpenCV/OpenCV/modules/videoio/src/cap_gstreamer.cpp:407:错误:(-2)gstreamer:无法启动管道
在函数icvStartPipeline中执行此操作时,我解决了相同的问题:
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")
它可以工作。调用cap.set-cap.set(31280);在循环前设置(4720)。请确保检查cap.set的返回值,因为它们根据调用是否成功返回true或false。是否可以检查GStreamer日志-使用env变量GST_DEBUG=3或som可能是一个错误请参见-imshow不应导致核心转储,但其实现不够健壮,无法避免此问题。