pyplotのメソッドを使ってフレームごとに動画を再生したい。
cv2のメソッドを使いながら色々試しているとcv2.imshow()が使えないという難題に直面しました。
色々試しましたが解決できそうにないので、pyplotのimshow()メソッドで代用することにしました。しかし、画像一枚だけを表示するのなら簡単にできますが、動画のフレームごとに止まることなく再生させるすべがわかりません。
もし詳しい方がいれば教えていただけると幸いです。
フレームごとに処理を加えたいのでそれが可能なコード方法を教えて頂きたいです。
試しに書いたコード(qを押さないと次のフレームに進んでくれない)
Python
1import cv2 as cv 2from matplotlib import pyplot as plt 3 4filepath = "Videos/CatVideo.mp4" 5 6# 動画の読み込み 7cap = cv.VideoCapture(filepath) 8 9# 動画終了まで繰り返し 10while(cap.isOpened()): 11 # フレームを取得 12 ret, frame = cap.read() 13 14 # フレームを表示 15 plt.imshow(frame) 16 plt.show() 17 #! cv.show()は使えないのでpyplotで代用 18 # cv.startWindowThread() 19 # cv.namedWindow("preview") 20 # cv.imshow("preview", frame) 21 22 # qキーを押さないと次のフレームに進んでくれない。 23 if cv.waitKey(1) & 0xFF == ord('q'): 24 break 25 26cap.release() 27cv.destroyAllWindows 28
よろしくお願いします。
https://github.com/tody411/PyIntroduction/blob/master/opencv/pycv_tutorial/video_capture.md
の後半の「pltCaputreVideo()」みたいなのですか?
もしそうなら、
animation.FuncAnimation
でググれば、使用例いろいろ見つかります
ありがとうございます!とてもいいヒント頂きました!いろいろと調べて見ますね!
上記Webサイトのコードにもありますように、Kenta_pyさんが回答に書かれた二つ目のコードの
ani.save(...
の行を
plt.show()
に変えたら、ファイル保存ではなく画面表示になります
また、上記行の後に、
cap.release()
を入れた方がいいかも
どちらも既にご存知だとは思いますが、念の為に追記しておきます
回答1件
あなたの回答
tips
プレビュー