※ replitで「You've used up all your Development time」というメッセージが出た人は
こちらを参考にして新しくreplitのアカウントを作ってください。
※ 本題に入る前に、必ず動画の
連絡
を見てください。
- リサイズ
- Hueを変化させる動画
- Saturationを変化させる動画
- Valueを変化させる動画
- 2つの静止画をもとにした動画
元画像の選定
今回の課題では2枚の静止画を元にして動画を作る。
課題2~4では1枚目の画像を元にして Hue, Saturation, Value を変化させた動画を作る。そのため、第12回の課題の条件
- 赤・黄・緑・シアン・青・マゼンタの6色のいずれかに近い色を含む
- 鮮やかすぎずくすみ過ぎてもいないエリアを含む
- 明るすぎず暗すぎないエリアを含む
を満たすものを使う。
また、課題5では2つの画像を混ぜ合わせ、その強度を変えてなめらかに変化するような動画を作る。
そのため、2枚目の画像は1枚目と解像度が同じものを使う (加工して同じになるようにしてもよい)。
例 (これは解説で使用しているものなのでこれを元画像として使ってはいけない)
動画出力
OpenCVで動画を作るには、まず movie write を用意する。あらかじめフレームレート (1秒当たりのフレーム数)、幅と高さを決めておき、
fourcc = cv2.VideoWriter_fourcc(*'mp4v')
out = cv2.VideoWriter('出力ファイル名', fourcc, フレームレート, (幅, 高さ))
のようにすると MPEG4 形式の動画にあたるファイル out ができる。これに
とすると1フレーム分のデータが書き込まれる。必要なフレームをすべて書き込んだあとで
とすると書き込みが終了する。
Hueを変化させる動画
第12回で見たように、HSV表現では色相 Hue は 0~179 の値をとる。
そこで、元画像からHueを1ずつずらした画像をつくり、それを1フレームずつ書き込めばこのような動画ができる。
フレームレートを 30fpsにすれば、ちょうど6秒でHueが180増えて元の状態に戻る。
Saturationを変化させる動画
HSV表現では彩度 Saturation は 0~255 の値をとる。
元画像から彩度を 255減らした画像から順に1ずつ上げて255増やした状態まで変化させると、全フレーム数は 255 × 2 + 1 = 511 になる。
フレームレートを 60fpsにすれば、9秒弱の動画になる。
Valueを変化させる動画
HSV表現では明度 Value は 0~255 の値をとる。
元画像から明度を 255減らした画像から順に1ずつ上げて255増やした状態まで変化させると、全フレーム数は 255 × 2 + 1 = 511 になる。
フレームレートを 60fpsにすれば、9秒弱の動画になる。
2つの静止画をもとにした動画
OpenCVの addWeightedメソッドを使えば、2枚の画像に重みをつけて重ね合わせることができる (
第8回の課題2)。
例えば以下のようにすれば mixedImage は image[0] と image[1] を 4:6 で混ぜた画像になる。
mixedImage = cv2.addWeighted(image[0], 0.4, image[1], 0.6, 0)
例えば動画のフレームレートを 30fps, 時間を9秒とすると総フレーム数は 270 となる。動画開始時からのフレーム数に比例して image[0] の重みが 0 → 1, image[1] の重みが 1→0
のように変わるようにすれば、image[1] の絵がだんだん薄れて image[0] の絵に変わっていくような動画ができる。