index

第3回の趣旨

OPenCVの機能の複合的利用

  • 複数の関数を組み合わせて,より複雑な処理ができるようになろう。

GUIに挑戦

  • トラックバーやマウスイベントを取得し、画像処理ソフトの一部をGUI (Graphical User Interface) で操作できるようにしよう。

サンプルの実行

サンプルプログラムのダウンロード

  1. ここからダウンロード。
  2. ダウンロードしたら適当な場所で解凍しましょう。

サンプルプログラムを動かしてみよう

  1. 第1回と同様に、3つのサンプルプログラム(trackbar、mouse、change_pix)を動かしてみよう。
  2. change_pixでは、コマンドライン引数で画像を読み込みます。
    $./main ../images/00.bmp
  3. change_pixでは、imagesフォルダ内の別の画像も読み込んでみましょう。

解説

createTrackbar関数

トラックバーを作成して、指定されたウィンドウに追加する関数です。

createTrackbar("Trackbar", "Window", $value, 100);

では、ウィンドウ"Window"にトラックバー"Trackbar"(最大値100)を生成し、トラックバーの値が常にvalueに反映されます。

while文の無限ループの中で,valueの値を文字列 str として、

putText(dst_img, str, Point(10, 50), FONT_HERSHEY_DUPLEX, 1.0, Scalar(0, 0, 0));

関数によりdst_img上に描画しています。
ESCキーを押すとwhile文をbreakし、プログラムを終了します。

setMouseCallback?関数

マウスイベントに対するコールバックを指定する関数です。

setMouseCallback("Window", on_mouse, (void *)&src_img);

では、ウィンドウ"Window"内でマウスイベント(クリックなど)が発生するたびに、
on_mouse関数が呼び出されます。 on_mouse関数

void on_mouse(int event, int x, int y, int flags, void *param)

は、マウスがどのような状態なのかを引数にしており、この値はsetMouseCallback?が設定します。

int x, y

は画像座標系におけるマウスポインタの座標です。

int event

はイベントの内容です。
例えば、マウスが移動したとき、eventの値がEVENT_MOUSEMOVEになります。
他にどのようなイベントがあるか、調べてみてください。

trackbar.cppのサンプルプログラムと同様に、while文の無限ループの中で、マウスイベントの状況を文字列として、dst_img上に描画しています。

練習2:画素値操作機能のGUI化

  1. 画像を読み込む。
  2. トラックバーでR(赤)チャンネルの値の倍率を指定する。
  3. 加工した画像を表示する。

課題2:人物写真を加工しよう!

  • 自由な発想で人物写真を見栄えよく見せる画像処理を施し、保存してください。
  • GUIなどを使って、プログラム実行中にパラメータを変更できる工夫があると大幅に加点します。

注意事項

  • 指定したファイルが存在しない、パラメータが足りない、異常なパラメータが指定されたなど、
    処理が実行できない場合には、適切なエラーメッセージを表示してください。
  • 適宜コメントを入れたり、関数化したりして、他人にもわかりやすいプログラムになるように心がけてください。
    全くコメントのないものは減点します。
  • 他人のプログラムを写したことが判明した場合は、両者とも0点になります。
  • 課題内容に対応していないプログラムには点をつけられません。

提出方法

  • 第5回(5/16)の講義中に課題プログラムのコンパイルと実行が正しくできるかを確認します。
  • 下記の提出物を第5回の講義日(5/16)24:00までにCLEで提出してください。
    • 提出物一式を入れるフォルダの名前は学生番号(ログインIDではない!)にして,zipファイルに圧縮してください。
  • 提出物
    • ソースコード
    • コンパイルに使用するMakefile
    • 作成したソフトの仕様や実行方法等を記載したReadme.txt
    • 加工前後の画像
    • その他,コンパイル・実行に必要なファイル

評価方法

  • 仕様を満たしているか。
  • ソースコードの可読性の高さ。
    • 機能ごとに関数を分け、わかりやすい関数名をつけているか
      (機能ごとにソースを分けて分割コンパイルをしてもよいです)。
    • わかりやすい変数名をつけているか。
    • わかりやすいコメントを記述しているか。
  • 機能に対応した分かりやすいコマンドであるか。
  • 無駄な処理を行っていないか。
  • 工夫や加工の独創性に応じて加点します。

参考になるサイト

質問がある場合

  • 中西研 大西までメールをください。
    なお、件名は「AP2018:課題2」としてください。
    yuya.onishi_AT_ams.eng.osaka-u.ac.jp (_AT_は@に変えてください)

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2018-04-25 (水) 13:40:30 (173d)