知能情報学実験及び演習 第5回目(田中)

 

第1部

第4回のプログラムの解説。

 

第2部

今までの応用として、「人検出システム」を作成する。

人とは、「肌色」が多いことを指している。

アルゴリズムは、以下の通り。

 

1.第4回のシステムを使って、画素が「肌色」であれば255,そうでなければ0であるような配列outを出力する。

2.肌色の画素を数える。

3.顔である判定を行う。

ループの外で、カウンタmaxskin=0としておく。

              肌色の画素を数える.

肌色の画素数がmaxskinよりも多ければ、

                            maxskinを更新

                            画像をface.bmpというファイル名で保存

                            画素数、時刻をrecord.txtというファイルに保存

 

ヒント:

画素値への直接アクセス

たとえばimgという1チャンネルの画像であれば

img.at<uchar>(y,x)

で横x, yの位置の画素の値が取り出せる.imgの行数はimg.rowsimgの列数はimg.colsでわかる.

 

現在時刻の取得には,ctimeを使う.

以下のプログラムを参考にするとよい.

#include <iostream>

#include <ctime>

 

void main(void)

{

    time_t timer;

        struct tm *jikan;

 

    timer = time(NULL);          /* 経過時間を取得 */

        jikan = localtime(&timer);    /* 経過時間を時間を表す構造体 jikan に変換 */

    std::cout << "ただいまの時刻は " << jikan->tm_hour << "" << jikan->tm_min << "" << jikan->tm_sec<<"秒です。" << std::endl;

 

/* 時間を表す構造体 struct tm を下記に示します。

 

    struct tm {

                int tm_sec;        //

                        int tm_min;        //

        int tm_hour;       //

        int tm_mday;       //

        int tm_mon;        // 月( 1月=0

        int tm_year;       // 西暦年 - 1900

        int tm_wday;       // 曜日( 日=0

        int tm_yday;       // 日(年を通して)

        int tm_isdst;      // サマータイムフラグ

    };

*/

}

 

 

早く出来た人は次のようなオプション問題も考えなさい。

・タイムスタンプを画像に埋め込む。

 

レポート

メールで以下のものを送付。

1.プログラム(cpp)

2.face.bmp, record.txt

3.考察(さらなる改良をするには、どのようなことをすれば良いと思われるか。今自分が実際にできなくても、話だけでもいいので、考えてみること)。

4.感想(5回を通して)

以上