lisz-works

プログラミングと興味を貴方に

Python3 OpenCVの動画中に図形を描画する

【スポンサーリンク】

Python

こんにちわlisです!

Python3でOpenCVで、動画の上に図形の描画です!

やること

動画を再生して、その上に図形を描画します。

この例ではストップウォッチを録画した動画に、左上にある赤枠を描画しています。

完成したサプル

ざっくりと説明すると、動画はフレーム単位の画像の連続なので

  1. フレームを取得
  2. フレームの画像に図形を描画
  3. フレームの画像を表示

というのを繰り替えすイメージです。

動画の描画

動画の描画については、こちらで書きました!

www.lisz-works.com

この再生中の動画の上に、図形を描画します。

図形の描画について

図形の描画をするのに

www.lisz-works.com

でやったようにやりたいのですが、毎フレーム描画を行わないといけません。

今回はまず、動画中に固定で矩形を描画するものを作ります。

ソース

こんな感じで実装しました。

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に対して

  1. cv2.rectangle()を使い矩形を描画
  2. frameをcv.imshow()で表示

しています。

これを毎フレームごとに行うことで、動画上にずっと矩形が存在する状態になります。

あとがき

Python3でOpenCVで、動画の上に図形の描画するでした!

OpenCVが想像以上に便利過ぎてビビってます(笑)

www.lisz-works.com

www.lisz-works.com