こんにちわlisです!
Python3でOpenCVで、動画の上に図形の描画です!
やること
動画を再生して、その上に図形を描画します。
この例ではストップウォッチを録画した動画に、左上にある赤枠を描画しています。
ざっくりと説明すると、動画はフレーム単位の画像の連続なので
- フレームを取得
- フレームの画像に図形を描画
- フレームの画像を表示
というのを繰り替えすイメージです。
動画の描画
動画の描画については、こちらで書きました!
この再生中の動画の上に、図形を描画します。
図形の描画について
図形の描画をするのに
でやったようにやりたいのですが、毎フレーム描画を行わないといけません。
今回はまず、動画中に固定で矩形を描画するものを作ります。
ソース
こんな感じで実装しました。
import numpy as np import cv2 as cv path = 'stopwatch.avi' def showFrame(frame): cv.rectangle(frame, (100, 100), (40, 60), (0, 0, 255)) cv.imshow('frame', frame) capture = cv.VideoCapture(path) while(capture.isOpened()): ret, frame = capture.read() if ret == True: showFrame(frame) key = cv.waitKey(20) & 0xFF if key == ord('q'): break else: break cv.destroyAllWindows()
動画を表示するには、毎周期フレームを「capture.read()」で取得して描画します。
このとき取得したフレーム(frame)が画像と同じなので、これに描画をします。
showFrame()で、取得したframeに対して
- cv2.rectangle()を使い矩形を描画
- frameをcv.imshow()で表示
しています。
これを毎フレームごとに行うことで、動画上にずっと矩形が存在する状態になります。
あとがき
Python3でOpenCVで、動画の上に図形の描画するでした!
OpenCVが想像以上に便利過ぎてビビってます(笑)