分割故障OpenCV cap.read udp流Python

我是使用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

在终端工作得很好,所以我不知道接下来要看什么。

谢谢你的帮助。

编辑:正如萨默尔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错误:icvStartPipeline中的未指定错误(GStreamer:无法启动管道),文件/home/lab/Sam/OpenCV/opencv/modules/videoio/src/cap_gstreamer.cpp,第407行Traceback(最近一次调用最后一次):文件“ OpenCV_Gst.py“,第9行,如果cap.set(3,1280)== True:cv2.error:/home/lab/Sam/OpenCV/opencv/modules/videoio/src/cap_gstreamer.cpp:407:error :(-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")

有用。

链接地址: http://www.djcxy.com/p/25431.html

上一篇: Segmentation fault OpenCV cap.read udp stream Python

下一篇: How to output opencv to gstreamer in python?