2017-11-09 25 views
1

opencv-python == 3.3.0.10をmacOS 10.12.6で実行しようとしましたが、ファイルから読み込んでビデオをウィンドウに表示しました。私はここでhttp://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_gui/py_video_display/py_video_display.htmlのコードを '再生中'のファイルから正確にコピーしました。OpenCV Pythonアサーションが失敗しました

コードが正しく実行され、ビデオを示し、しかし、ビデオの終了後には、プログラムを壊し、次のエラーを与える:

Assertion failed: (ec == 0), function unlock, file /BuildRoot/Library/Caches/com.apple.xbs/Sources/libcxx/libcxx-307.5/src/mutex.cpp, line 48.

誰もがこれを引き起こすかもしれないものの任意のアイデアを持っていますか?あなたの便宜のために


コードスニペットは、それはあなたの質問から明らかではありません

cap = cv2.VideoCapture('vtest.avi') 

while(True): 
    ret, frame = cap.read() 

    if not ret: 
     break 

    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) 

    cv2.imshow('frame',gray) 
    if cv2.waitKey(1) & 0xFF == ord('q'): 
     break 

cv2.destroyAllWindows() 
+0

フレームを読み込んだ後、 'if ret == False:break'を追加します。 – zindarod

+0

コメントありがとうございます。私はそれを追加しましたが、まだ問題を解決しません。私はループの後にフラグを入れようとしましたが、プログラムはそこに到着しません。それはループから外に出ないようです。 – Campello

+0

は 'cap.release()'関数をコメントアウトし、 'while True:...'を使用します。出力は何ですか? – zindarod

答えて

0

(コメントでいくつかの提案を含めるように編集)、しかし、あなたが、具体的な状況に実行しているように見える場所ビデオは中断されずに再生を完了します。 I と考えているのは、cap.release()になるまでにVideoCaptureオブジェクトが既に閉じられているということです。私は、releaseへの電話を、休憩でifの声明の中に入れることをお勧めします。

私は実験する時間がなかったが、私は、通常は、このパターンに従ってください:

reader = cv2.VideoCapture(<stuff>) 
while True: 
    success, frame = reader.read() 
    if not success: 
    break 

私はそれらの文脈の中で明示的にreleaseを呼び出す必要があったではないと思います。

+0

ありがとうございます。それは問題を解決しませんでした。それはループを壊しますが、直後にクラッシュした場合(ループが実行されていない場合は何でも) – Campello

+0

OK、cv2.destroyAllWindows()のコメントを外すとクラッシュするようです。なぜどんなアイデア? – Campello

+0

スクリプトの先頭で 'cv2.namedWindow( 'frame')'を使うのはどうですか? – cwallenpoole

関連する問題