python: opencvで動画を重ねて再生する

プログラミング
スポンサーリンク




こんにちは、おみです。

最近はコロナのせいで外出ができずまともに運動ができないので、ダンボールでダーツボードを自作して家でダーツをしています。(ダーツライブの実機が家に欲しいです)

ダーツをしていると、理想の投げ方と今の投げ方の差を視覚的に分析したいときがあります。

そんなとき、理想のフォームと今のフォームの動画を重ねて比較することで、細かい差がわかりやすくなり便利だと思うので、今回は2つの動画を重ねて再生するプログラムを作成したいと思います。

 

スポンサーリンク

下準備

フリーの動画サイトはいくつかありますが、今回は「pixabay」を利用したいと思います。

↓サイトURL

Attention Required! | Cloudflare

※pixabayは著作権は放棄されているので基本的にフリーで使用できますが、その他の権利で保護されているものもあるそうです。

↓詳しくは

pixabay(ピクサベイ)で著作権違反になる場合と安全に使う方法 - ブライトライフ365
はい、どうもー! 原文パパです(≧∇≦)/ 今回は、pixabay(ピクサベイ)で著作権違反になる場合と安全に使う方法、というテーマでお送りします。 魅力的なフリー画像が大量に掲載されている「pixabay(ピクサベイ)

 

pixabayから2つの動画をダウンロードし、プログラムと同じフォルダに保存します。

今回は下記の動画を使用します。(動画の乗せ方分からなかったので、画像です)

① Elster – 35908.mp4

 

② Maple Leaf – 36419.mp4

 

ソースコード

import cv2
import sys


# 動画のパスを指定
video1_path = "Elster - 35908.mp4"
video2_path = "Maple Leaf - 36419.mp4"

# ファイルを読み込み
cap1 = cv2.VideoCapture(video1_path)
cap2 = cv2.VideoCapture(video2_path)

# 動画ファイルが開けたかを確認
if not cap1.isOpened():
print("1つ目の動画ファイルの読み込みに失敗しました。")
sys.exit()

if not cap2.isOpened():
print("2つ目の動画ファイルの読み込みに失敗しました。")
sys.exit()

# 出力する動画のサイズを指定
width = 800
height = 600

# 動画を再生する
while True:
# 1つ目の動画から1フレーム取得する
ret1, frame1 = cap1.read()
if not ret1:
break

# 2つ目の動画から1フレーム取得する
ret2, frame2 = cap2.read()
if not ret2:
break

# フレームのサイズを合わせる
frame1 = cv2.resize(frame1, (800, 600))
frame2 = cv2.resize(frame2, (800, 600))

# 画像を重ね合わせる
frame3 = cv2.addWeighted(
src1=frame1, alpha=0.5,
src2=frame2, beta=0.5,
gamma=0
)

# 画像を表示する
cv2.imshow("Frame", frame3)

key = cv2.waitKey(30)
if key == 27:
break

# 終了時処理
cap1.release()
cap2.release()
cv2.destroyAllWindows()

 

実行結果

2つの動画が重ね合わさって再生されます。

 

参考文献

OpenCVで手っ取り早く動体検知してみた - Qiita
自分が書いた記事の中でだいぶ前に書いたOpenCVやRaspberryPiの記事がここ最近また皆さんに読まれるようになりました。最近のトレンドになっている「ディープラーニング」、「エッジコンピューティング」に関連したキーワードになって...
【Python】OpenCVで画像を合成する – addWeighted, bitwise演算, ROI
Pythonに画像処理ライブラリのOpenCVを使って、2つの画像を合成したり重ねたりする方法を見ていきたいと思います。addWeighted()での合成や、関心領域(ROI)とbitwise演算を使った合成の方法を見ていきます。

 

コメント

タイトルとURLをコピーしました