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
© Copyright 2024 Paperzz