*index [#qa253e0e]
#contents

*第3回の趣旨 [#sa340a9e]
**OPenCVの機能の複合的利用[#ba4e5717]
-複数の関数を組み合わせて,より複雑な処理ができるようになろう.
-複数の関数を組み合わせて,より複雑な処理ができるようになろう。
**GUIに挑戦 [#rf2219f4]
-マウスイベントを取得し,画像処理ソフトの一部をGUIで操作できるようにしよう.
-トラックバーやマウスイベントを取得し、画像処理ソフトの一部をGUI (Graphical User Interface) で操作できるようにしよう。

*練習 [#hfbd9d25]
*サンプルの実行 [#hfbd9d25]
**サンプルプログラムのダウンロード [#s79620c1]
+[[ここからダウンロード.>http://smg.ams.eng.osaka-u.ac.jp/tanaka/AdvancedPrograming2012/samples2.zip]]
+ダウンロードしたら適当な場所で解凍しましょう.
+[[ここからダウンロード。>http://www.er.ams.eng.osaka-u.ac.jp/kawai/AP2018/samples2.zip]]
+ダウンロードしたら適当な場所で解凍しましょう。

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

*課題:画像処理ソフトを作ろう(応用編)[#fafc23e5]
**課題1で作成した切り取り機能のGUI化 [#t019de18]
+画像を読み込む.
+マウスのドラッグアンドドロップ操作で指定された領域を取得する.
+切り取った画像を表示する.
**赤目修整機能の追加 [#aeab64c7]
+赤目の写真を読み込む.
+マウスでクリックされた赤目の位置を取得する.
+クリックされた位置の周辺の画素にアクセスし,赤目修整の処理を実行する.
--赤目修整の処理は各自工夫して実装せよ.
+赤目修整の実行結果を出力する.
**(余力があれば)モザイク処理機能の追加 [#v565c31c]
+画像を読み込む.
+マウスのドラッグアンドドロップ操作で指定された領域を取得する.
+指定領域をモザイク処理する.
+モザイク処理した画像を表示する.
**(さらに余力があれば)その他 [#c85423df]
-画像処理に関する機能を自由に追加せよ.
*解説 [#r1c81636]
**createTrackbar関数 [#y19fa497]
トラックバーを作成して、指定されたウィンドウに追加する関数です。
 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関数 [#g38e2d76]
マウスイベントに対するコールバックを指定する関数です。
 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化 [#t019de18]
+画像を読み込む。
+トラックバーでR(赤)チャンネルの値の倍率を指定する。
+加工した画像を表示する。

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

**注意事項 [#m87b9752]
-指定したファイルが存在しない,パラメータが足りない,異常なパラメータが指定されたなど,処理が実行できない場合には,適切なエラーメッセージを表示せよ.
-Webページを参考にした場合や,誰かに教えてもらった場合には,ソースコードの該当箇所にコメントにてURLや名前・学生番号を記述せよ(下記のリファレンスマニュアルは不要).
-指定したファイルが存在しない、パラメータが足りない、異常なパラメータが指定されたなど、~
処理が実行できない場合には、適切なエラーメッセージを表示してください。
-適宜コメントを入れたり、関数化したりして、他人にもわかりやすいプログラムになるように心がけてください。~
全くコメントのないものは減点します。
-他人のプログラムを写したことが判明した場合は、両者とも0点になります。
-課題内容に対応していないプログラムには点をつけられません。

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

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

*参考になるサイト [#r68ab4cb]
-OpenCVライブラリに関する日本語リファレンスマニュアル~
[[OpenCV v1.0.0リファレンスマニュアル>http://opencv.jp/opencv-1.0.0/document/]]~
-自宅のPCで課題をやりたい場合~
[[Vine Linux on VMware Player]]~
[[OpenCV 2.1 C++ リファレンスマニュアル>http://opencv.jp/opencv-2.1/cpp/index.html]]~
[[OpenCV2 プログラミングブック>https://book.mynavi.jp/support/pc/opencv2/c3/]]

*質問がある場合 [#c4e4f38c]
-中西研 田中までメールをください.~
なお,件名は「AP2012:課題2」としてください.~
tanaka_AT_ams.eng.osaka-u.ac.jp (_AT_は@に変えてください)
-中西研 大西までメールをください。~
なお、件名は「AP2018:課題2」としてください。~
yuya.onishi_AT_ams.eng.osaka-u.ac.jp (_AT_は@に変えてください)


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS