動画像とは? 動画を処理する

http://apple.ee.uec.ac.jp/isyslab
http://apple.ee.uec.ac.jp/isyslab
Outline
‡ 動画像とは?
プログラミング演習 おまけその2
‡ GUIを使った動画像の表示
動画で遊ぶ on 宇宙世紀0079
‡ 画像の合成
‡ 画像の合成の例(余談)
‡ 最後の課題
電気通信大学情報理工学部
知能機械工学科
長井隆行
‡ 本日の演習
‡ ポイント
2
http://apple.ee.uec.ac.jp/isyslab
http://apple.ee.uec.ac.jp/isyslab
動画を処理する
動画像とは?
‡ 静止画に対する画像処理手法をフレーム毎に
‡ 動画像の原理はぱらぱら漫画と同じ
適用することが可能
‡ スピードの問題がある場合がある
‡ 例)ステレオの計算、顔(人)の抽出
‡ フレーム
・・・
前フレームの結果を利用
このあたりにありそう
‡ 1秒間に何枚の画像を使うか⇒フレームレート
抽出処理
(fps)
‡ 29.97fps(NTSC),
24fps(映画、デジタルシネマ)
‡ 人の動きの知覚能力に関係がある
抽出処理
抽出処理
‡ フレーム間のつながりを考慮した方が精度が向上し
‡ インターレース方式とプログレッシブ方式
3
たり効率がよくなる場合が多々ある
‡ トラッキング(追跡)ではフレーム間のつながりが分
からないといけない
4
http://apple.ee.uec.ac.jp/isyslab
http://apple.ee.uec.ac.jp/isyslab
GUIで動画を表示する
画像を使う
While文を使って繰り返し画像を表示する
‡ ⇒動画に見えるはず!
‡
‡ 画像を読み込んで動画として使ってみる
‡ 画像をどんどん明るく変化させる
‡ 動画として表示
p14-1.c
‡ ただ画面を黒から白へ変化させるプログラム
‡ 処理の関数(idle( ))を変えると色が変えられる
‡ usleep()という関数で描画の速度を調整している
‡
‡ usleep(10000);
‡ p14-2.c
⇒init_animate( )関数に画像を開く機能を追加
しただけ
⇒ 0.1秒 (10000µ秒)一時停止
5
http://apple.ee.uec.ac.jp/isyslab
6
http://apple.ee.uec.ac.jp/isyslab
画像合成を使った例(余談)
画像の合成
‡
‡
‡
2枚の画像を重ねると面白いことがいろいろできる
透明人間になってみる!?
p14-3.c
背景画像と人が写った画像を用意する
‡ 両画像の背景が一致していることがポイント
‡ 三脚を使えば簡単に撮れる
‡ これらを比率を変えて足し合わせる
‡
平均顔
‡
顔変換
‡
モーフィング
‡
‡
7
検索すればたくさん動画が見れる
8
http://apple.ee.uec.ac.jp/isyslab
http://apple.ee.uec.ac.jp/isyslab
最後の課題
‡
本日の演習
ガXXムを操縦したい! (個人的にはドXの方が好き・・・)
ー準備ー
‡ まずは、p14-4.cをダウンロードする
‡ p14-4.cをコンパイル・実行して画面に宇宙が表示されることを確認
‡ さらにキーボードで’s’を押すとガXXムが現れることを確認
ー課題ー (ここから先をメールで送る)
‡ マウスでガXXムを操ろう!
‡ p14-4.cのままではクリックしても何も起きない
‡ クリックした位置にガXXムが移動するように変更する
‡ ヒントは次のページ
‡ ソースコードと結果の画像(スクリーンキャプチャ)をメールで送る
‡ 送る画像はJPEGがベター
‡ 送る際には注意事項をよく確認すること
http://apple.ee.uec.ac.jp/COMPROG ⇒ 諸注意
‡ 今日の講義の感想・質問をメール本文に書いてください
‡ よく分かった、ここが分からない、など
⇒せめて画像処理で楽しみましょう
‡
‡
‡
2枚の画像を使う
背景とガXXムの画像
背景の任意の位置にガXXムの画像を張り付ける
⇒上書きする
(pos_x, pos_y)
ガ
X
X
ム
宇宙画像
9
http://apple.ee.uec.ac.jp/isyslab
ポイント
†
†
†
†
ガXXムの表示位置は(pos_x, pos_y)
int pos_x, int pos_y はともにグローバル変数
マウスをクリックした際の座標をこの変数に代入してあげればOK!
作りたい課題プログラムの流れ
こっちの処理が影響を受ける
宇宙画像の(pos_x, pos_y)
にガXXムを書き込み
宇宙画像をウインドウに表示
pos_x
こっちの処理が位置を書き換える
pos_y
グローバル変数
(どの関数からも使える箱)
† 補足
ユーザが
マウスでクリック
座標 (x, y)
void mouse(int button, int state, int x, int y)
この関数にこのような操作を加える!
† 実はマルチスレッド(並列処理)になっている
† GUIではマルチスレッドが基本
† なぜなら・・・
† プログラムが実行中でも(何か仕事をしていても)ユーザの操作を受け付けないといけない
11
10