OpenCVを初めて使用しています。私はUDPポートでビデオストリームにアクセスするプログラムを作成しようとしています。しかし、コードは実行時にセグメンテーション違反を与え続けます。このプログラムは、OpenCVによって読み込まれるごとに各フレームを表示することを意図しており、コンピュータ上のファイルで動作します。もし私が間違っていることを指摘できたら、私はそれを感謝します。セグメンテーションフォールトOpenCV cap.read udp stream Python
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
ちょうどいいので、私は次に何を見るか分からない。
ありがとうございました。
編集:
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()
を "キャップ= cv2.VideoCapture()...一方(cap.isOpened())" の間: をSAMER Tufailによって示唆されるように、私が追加しようとしました。しかし、今は違うエラーが出ます(私は== Trueを使って試してみました)。
GStreamer Plugin:埋め込みビデオの再生が停止しました。モジュールudpsrc0が報告されました:内部データフローエラーです。 icvStartPipeline、ファイル/home/lab/Sam/OpenCV/opencv/modules/videoio/src/cap_gstreamer.cpp、行407でOpenCVエラー:未指定のエラー(GStreamer:パイプラインを開始できません) トレースバック(最新のコール最後) : ファイル "OpenCV_Gst.py"、行9、 の場合cap.set(3、1280)== True: cv2.error:/ home/lab/Sam/OpenCV/opencv/modules/videoio/src/cap_gstreamer .cpp:407:エラー:(-2)のGStreamer:関数icvStartPipelineパイプライン を開始することができない
call cap.set-cap.set(3、1280);あなたのループの前にcap.set(4,720)。呼び出しが成功したかどうかによってtrueかfalseを返すので、cap.setの戻り値を確認してください。 –
GStreamerのログを確認できますか?env変数GST_DEBUG = 3を使用してください – nayana