<?xml version="1.0" encoding="UTF-8" ?><rdf:RDF 
  xmlns="http://purl.org/rss/1.0/"
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:atom="http://www.w3.org/2005/Atom"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xml:lang="ja">
  <channel rdf:about="http://w.atwiki.jp/perception_design/">
    <title>perception_design @ ウィキ</title>
    <link>http://w.atwiki.jp/perception_design/</link>
    <atom:link href="https://w.atwiki.jp/perception_design/rss10.xml" rel="self" type="application/rss+xml" />
    <atom:link rel="hub" href="https://pubsubhubbub.appspot.com" />
    <description>perception_design @ ウィキ</description>

    <dc:language>ja</dc:language>
    <dc:date>2009-06-25T01:00:36+09:00</dc:date>
    <utime>1245859236</utime>

    <items>
      <rdf:Seq>
                <rdf:li rdf:resource="https://w.atwiki.jp/perception_design/pages/14.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/perception_design/pages/36.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/perception_design/pages/33.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/perception_design/pages/35.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/perception_design/pages/18.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/perception_design/pages/34.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/perception_design/pages/13.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/perception_design/pages/32.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/perception_design/pages/17.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/perception_design/pages/31.html" />
              </rdf:Seq>
    </items>
	
		
    
  </channel>
    <item rdf:about="https://w.atwiki.jp/perception_design/pages/14.html">
    <title>トップページ</title>
    <link>https://w.atwiki.jp/perception_design/pages/14.html</link>
    <description>
      公立はこだて未来大学
Perception Design
　～主観の可視化～

情報アーキテクチャ学科3年生
によるページ

本日のアクセス数  &amp;counter(today)


[[更新情報]]
・[[ブログ&gt;http://ameblo.jp/perception-design/]]更新しました
・[[OpenCVのページ&gt;http://www12.atwiki.jp/perception_design/pages/33.html]](OpenCVの参考書について)
・[[２００９年５月２５日]]を更新しました
・[[予定表]]を更新しました
・[[メンバー紹介]]を更新しました





[[連絡事項]]
・課題３の解説を更新しました。課題２の解説もありますので、各自課題を進めてください。
・５月２７日にグループ分けをします
・５月２５日に実験報告会をします
・５月２０日までに主観の可視化、OpenCVの課題【OpenCVを使って画像を表示させる】



リンク
[[予定表]]
[[先生方からのアドバイス&gt;http://www12.atwiki.jp/perception_design/pages/13.html]]
[[ブログ&gt;http://ameblo.jp/perception-design/]]
[[OpenCV]]
[[メンバー紹介]]    </description>
    <dc:date>2009-06-25T01:00:36+09:00</dc:date>
    <utime>1245859236</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/perception_design/pages/36.html">
    <title>OpenCVの参考書について</title>
    <link>https://w.atwiki.jp/perception_design/pages/36.html</link>
    <description>
      [[OpenCV]]の参考書が届きましたので合計で3冊になりました。

OpenCVの参考書を使いたい人は、プロジェクトスペースの窓の下のロッカーみたいな箱に入ってますので自由に使ってください。

ロッカーには、鍵がかかってて鍵は、岡本先生の研究スペースの黄色いブロックみたいなのがおいてある机のとこにある引き出しみたいな中に木の灰皿に鍵が２つ入ってます。

OpenCVの参考書が入ってるのは、左側のロッカーです。


使い終わったあとは、元の場所に戻してしっかり施錠してください。

なお、もって帰りたいって人がいたら、b1007033@fun.ac.jpまで連絡してから持って帰るようにしてください。    </description>
    <dc:date>2009-06-01T16:49:00+09:00</dc:date>
    <utime>1243842540</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/perception_design/pages/33.html">
    <title>OpenCVのページ</title>
    <link>https://w.atwiki.jp/perception_design/pages/33.html</link>
    <description>
      [[OpenCV]]にの課題、連絡などのためのページ

・[[OpenCVの参考書について&gt;http://www12.atwiki.jp/perception_design/pages/36.html]]


【OpenCVを使ってウィンドウに画像を表示させる】5月20日まで...
・[[20日までの課題解説&gt;http://www12.atwiki.jp/perception_design/pages/17.html]](5月19日更新)
・[[20日までの課題がまだ完成していない人向け&gt;http://www12.atwiki.jp/perception_design/pages/32.html]](5月20日更新)


【ウィンドウに複数の画像を表示させる】5月30日まで...
・[[課題説明&gt;URL]]    </description>
    <dc:date>2009-06-01T16:47:56+09:00</dc:date>
    <utime>1243842476</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/perception_design/pages/35.html">
    <title>URL</title>
    <link>https://w.atwiki.jp/perception_design/pages/35.html</link>
    <description>
      課題３のページ

このページは課題３【１つのウィンドウに複数の画像を表示させる】をやっている人向けのページです。

***課題３の作成時の注意

今回の課題はプロジェクト作成時から前回までのやり方ではできないので
このページを見ながら作成することをおすすめします。


***プロジェクトの作成


１、まず、プロジェクトを作成します。

ファイル　→　新規作成　→　プロジェクト

※ここからが前回と違います

前回までは、Win32コンソールアプリケーションで作成したと思いますが、今回の課題では、

CLRを選択し、右側に windows フォームアプリケーションを選択し、好きなプロジェクト名を入力してOKを押してください。


２、次に出てくる画面で、前回と同じように「プリコンパイル済みヘッダ」のチェックをはずして完了を押してください。


フォームアプリケーションとは、GUIを簡単に作れるものです。
なので、画面にボタンを簡単に配置したり、画像を置いたりすることができます。

***プログラムを書く

今回の課題は、画面に画像を配置したりして場所などを決めます
画像を配置すると、自動的にプログラムを書いてくれます。


プロジェクトを作成したら、Form.h[デザイン]のようなものが開いている状態になっていると思います。

そこで、画面の右端に「ツールボックス」と書かれた縦型のタブみたいなのがあると思います。
その上にマウスを当てるとぴよっとなんか出てくるので、その中から「button」と書かれたものを見つけて
form.h[デザイン]の画面にドラッグします。

※ここで、もしツールボックスの中が空だった人は、Form.h[デザイン]を開いた状態でもう一度マウスをツールボックスに当ててみてください。

すると、画面にボタンが現れると思います。

次に、同じようにツールボックスの中の「PictureBox」を画面にドラッグします。
すると、四角で囲まれた範囲が現れるので、その中で右クリックしてイメージの選択でイメージを選択します。

すると、画面に画像が表示されます。

同じように4つPictureBoxを同じようにドラッグしてイメージを選択してください。
今は、画像の位置などを決めるだけなのでなんの画像でもかまいません。
あとから、[[OpenCV]]で画像を読み込んでその画像を表示するプログラムに変えます。


ここまで終わった時点で、プログラムを書くファイル(Form.h)には、ボタンを配置するプログラムと画像の位置や、サイズを定義して表示するプログラムが完成していると思います。
Form.h[デザイン]で画像の位置を変えたりすると自動的にプログラムが変更されます。

確認のために、Form.hを開いてみてください。
開き方がわからない人は、ボタンをForm.h[デザイン]の先ほど配置したボタンをダブルクリックしてみてください。

そうすると、上のタブにForm.hが現れてくると思いますので、そこを開いてみると
// 
			// button1
			// 
			this-&gt;button1-&gt;Location = System::Drawing::Point(417, 471);
			this-&gt;button1-&gt;Name = L&quot;button1&quot;;
			this-&gt;button1-&gt;Size = System::Drawing::Size(75, 23);
			this-&gt;button1-&gt;TabIndex = 0;
			this-&gt;button1-&gt;Text = L&quot;チェンジ&quot;;
			this-&gt;button1-&gt;UseVisualStyleBackColor = true;
			this-&gt;button1-&gt;Click += gcnew System::EventHandler(this, &amp;Form1::button1_Click_1);
			
			// 
			// pictureBox3
			// 
			this-&gt;pictureBox3-&gt;Image = (cli::safe_cast&lt;System::Drawing::Image^  &gt;(resources-&gt;GetObject(L&quot;pictureBox3.Image&quot;)));
			this-&gt;pictureBox3-&gt;Location = System::Drawing::Point(70, 56);
			this-&gt;pictureBox3-&gt;Name = L&quot;pictureBox3&quot;;
			this-&gt;pictureBox3-&gt;Size = System::Drawing::Size(0, 0);
			this-&gt;pictureBox3-&gt;TabIndex = 2;
			this-&gt;pictureBox3-&gt;TabStop = false;
			// 

のように表示されていると思います。
PictureBoxのところは、PictureBoxの数だけ出てきます。


ここで、一度実行してみましょう。
ここでエラーが出た場合は、エラーの行数を確認し、もしPictureBoxのところにエラーが出てきていたら
そのエラーの部分を削除してしまいましょう。

実行すると、ボタンと画像が表示されていると思います。


次に、ボタンを押したときの処理を書きます。

ボタンを押したときの処理は

#pragma endregion
private: System::Void button1_Click_1(System::Object^  sender, System::EventArgs^  e) {

}

この中にかきます。

そして画像を表示させる処理は

this-&gt;pictureBox3-&gt;Size = System::Drawing::Size(縦, 横);

になります。
縦と横には自分の好きなサイズを入力してください。

この処理をPictureBoxの番号を変えてかいてやります。

このままだと、ボタンを押したときに全部の画像が出てきてしまうので
flagなどの変数を置いて、ボタンが押されたらflag++などして場合わけをしましょう。

そして実行してみましょう。




すると、ボタンを押す前から画像が表示されてしまっていると思います。
それは、PictureBoxのそれぞれのいろいろかいてあるところにも

this-&gt;pictureBox3-&gt;Size = System::Drawing::Size(縦, 横);

があるからです。

しかし、消してしまうとエラーが出てしいます。

そこで、始めに表示しないように
this-&gt;pictureBox3-&gt;Size = System::Drawing::Size(0, 0);

のようにサイズを0×0にします。
そうすると、プログラム的には表示しているが、実際は表示していないようになります。

これで、すべてのPictureBoxに同じようにかいて実行すると、何も表示されないで
ボタンを押すと、画像が出てくると思います。


ここまでが、ボタンを押すと画像が表示されるプログラムです。

しかし、今までは、画像は、PictureBoxに元からイメージを選択してやっていたので
ここからOpenCVを使い、画像を読み込んで処理していくところを説明します。


まず、Form.h[デザイン]のフレームの中のボタンとかなにもないとこで
ダブルクリックします。
すると、プログラムの方に

private: System::Void Form1_Load(System::Object^  sender, System::EventArgs^  e) {

}

が出てくると思います。
その中に今まで、メイン関数に書き込んでいたことを書き込みます。

そして、OpenCVを使うときに、しないといけないのが、インクルード。

今回の課題は、

#include &quot;cv.h&quot;
#include &quot;highgui.h&quot;

をインクルードします。

そして、cppファイルのほうにもライブラリファイルをインクルードしないといけません

ソースファイルの中に、プロジェクト名.cpのファイルがあると思うので開きます。


ライブラリファイルのインクルードは

#pragma commentを使います。

普通にいつも#includeなどとかくところ(上のところに)

#pragma comment( lib, &quot;cv.lib&quot; )
#pragma comment( lib, &quot;cxcore.lib&quot; )
#pragma comment( lib, &quot;cvaux.lib&quot; )
#pragma comment( lib, &quot;highgui.lib&quot; )

と記述します。
今まで書いてあった#includeの文は消さないでください。

※pragmaとcommentは改行されて表示されているかもしれませんが、実際にプログラムに書きこむときは改行しないで1行で書いてください。

これでインクルードは完了です。


↓ここからはForm.hの

private: System::Void Form1_Load(System::Object^  sender, System::EventArgs^  e) {

}

内に記述します。

まず、流れとしては

１、cvLoadImage関数でファイル読み込み(変数名は自由につけてください)

２、回転した後の画像を格納するIplImage型を生成(cvCreateImage関数を使う)(変数名は自由につけてください)

→ここでは、結果的に読み込んだ画像を回転させて３つの画像を作るので３つ生成する。

３、画像の中心を求めて、回転の軸を決める

４、回転行列を生成する

５、変換行列を求める

６、画像を回転させる

７、画像を表示させるために、Bitmap形式にする。

８、cvReleaseImage関数を使ってデータを開放する

９、PictureBoxに変換した画像をセットする。


みたいな感じです。

課題２までの内容で、１，８は書けると思いますのでここでは省略します
もしわからないってなった場合は課題２のソースを見るなり、wikiの課題２のページを参照するようにしてください。


それでは、処理後の画像を格納するところを作っていきます。

cvCreateImage()関数を使います。
今までも使ってきたので見覚えあると思います

IplImage *destinationImage = cvCreateImage( cvGetSize( sourceImage ), IPL_DEPTH_8U, 3);
IplImage *des1 = cvCreateImage( cvGetSize( sourceImage ), IPL_DEPTH_8U, 3);
IplImage *des2 = cvCreateImage( cvGetSize( sourceImage ), IPL_DEPTH_8U, 3);

これを記述します
今回は、destinationImage、des1、des2というIplImage型を生成しました。
生成するものの名前は、自由に決めてください
名前によって各々これから作っていくプログラムのdestinationImage、des1、des2らの名前を変更しながら勧めてください。


説明すると、
第一引数のcvGetSize()では、生成する画像のサイズを指定しています。
今回は読み込んだ画像と同じサイズを生成するので()の中身はsourceImage(読み込んだ画像名)でOKです。



ここから回転の処理をしていきます。

まず、回転の中心を決めます

回転の中心を求めるには

cvPoint2D32f( 中心のx座標, 中心のy座標); //回転の中心


基本的に画像の中心なので次のように記述します。

CvPoint2D32f center = cvPoint2D32f( sourceImage-&gt;width / 2.0, sourceImage-&gt;height / 2.0); //回転の中心



次に、回転行列を生成します。

回転行列は
cvCreateMat()関数を使って

CvMat *rotationMatrix = cvCreateMat( 2, 3, CV_32FC1 );

のように記述します。


そして変換行列は

cv2DRotationMatrix( center, ANGLE, SCALE, rotationMatrix);

を使います。

centerは回転の中心
ANGLEは回転角度
SCALEは拡大縮小の倍数
rotationMatrixは出力行列

ここで、一番上で#includeを書いてるところで

回転角度と拡大縮小の倍数をあらかじめ定義しておきます。

ここでは、

#define ANGLE 90.0 //90度回転なので
#define SCALE 1.0  //拡大縮小はしないので1.0でokです。

と記述しておいてください。


そして画像の拡大縮小は

cvWarpAffine( 原画, 出力画像, 変換行列, 補間方法, 対応の取れない点に対して与える値 );


ここで、原画、出力画像はsourceImageなどIplImage型の変数を入れます
ここには、自分で宣言したものをいれてください、

補間方法には、

CV_INTER_LINEAR | CV_WARP_FILL_OUTLIERS

を記述してください。
意味は

CV_INTER_LINEAR →　値が決定されない画素には第4引数で指定した色を与える

CV_WARP_FILL_OUTLIERS　→　出力画像の座標値を元に、対応する入力画像の座標を求める逆変換を行う


第4引数には、cvScalarAll( 0 )と記述してください

cvScalarAll( 0 )はCvScalar型の画像のすべての要素が０、すなわち黒をあらわします。


最終的に

cvWarpAffine( sourceImage, destinationImage, rotationMatrix, CV_INTER_LINEAR | CV_WARP_FILL_OUTLIERS, cvScalarAll( 0 ) );

こうなります。

ここで、実際に４つの画像を表示させないといけないので
３つの回転済みの画像を生成することになります。

なので、cvWarpAffine()関数は全部で3回使うことになります。

流れとしては

sourceImage →90度回転→ destinationImage

destinationImage →90度回転 → des1

des1 →90度回転→ des2

という感じで変換すれば簡単にできるので

上の流れにそって引数を入れていきます

原画は変換前の画像なので左側になります

出力画像は変換後の画像なので右側になります


先ほどの1回目の変換(sourceImageを90度回転してdestinationImageに格納する)例を示すと・・・


cvWarpAffine( sourceImage, destinationImage, rotationMatrix, CV_INTER_LINEAR | CV_WARP_FILL_OUTLIERS, cvScalarAll( 0 ) );


これは、sourceImageを90度回転してdestinationImageに格納するということになりますので

残りの２つは、同じように引数を変えてやってみてください。



次に読み込んだ画像はjpg形式だったりいろいろな形式だと思いますが
実際にFormでPictureBoxでイメージを選択した場合は自動的にBitmap形式に変換して表示しています

なので
cvLoadImage()関数で読み込んだ画像は自動で変換はしてくれないので
変換するプログラムを書きます。


IntPtr ip( new unsigned char[ sourceImage-&gt;widthStep * sourceImage-&gt;height ] );
memcpy( ip.ToPointer(), sourceImage-&gt;imageData, sourceImage-&gt;widthStep * sourceImage-&gt;height );   
Bitmap^ bmp = gcnew Bitmap(sourceImage-&gt;width, sourceImage-&gt;height, sourceImage-&gt;widthStep, System::Drawing::Imaging::PixelFormat::Format24bppRgb, ip);

これで変換できます。

ここは、C++の書き方なのでよくわかりませんが
サイズなどを指定しているところに画像の名前が入ってることがわかります。

これを４つの画像すべてに適用します
よってこの３行を4つかくことになります。

それぞれ画像の名前を変えてかいてやればOKです。

そして、上の変換のプログラムでのに注目してほしいのですが
Bitmap形式のbmpに入れています、

これは、画像ごとに用意する必要がありますので
画像ごとにbmp1、bmp2、bmp3を用意しましょう。

そして
1行目の初めの
IntPtr ipも画像ごとのサイズ情報などが入っていますので3行目の最後の引数のipを画像ごとにかえてやる必要があります。

今回はip1、ip2、ip3を用意しました。





// Bitmapに直接img-&gt;imgDataを読ませると、エラーになるのでコピーデータを渡す(原画)
IntPtr ip( new unsigned char[ sourceImage-&gt;widthStep * sourceImage-&gt;height ] );
memcpy( ip.ToPointer(), sourceImage-&gt;imageData, sourceImage-&gt;widthStep * sourceImage-&gt;height );   
Bitmap^ bmp = gcnew Bitmap(sourceImage-&gt;width, sourceImage-&gt;height, sourceImage-&gt;widthStep, System::Drawing::Imaging::PixelFormat::Format24bppRgb, ip);
				
// Bitmapに直接img-&gt;imgDataを読ませると、エラーになるのでコピーデータを渡す(原画を90度回転)
IntPtr ip2( new unsigned char[ destinationImage-&gt;widthStep * destinationImage-&gt;height ] );
memcpy( ip2.ToPointer(), destinationImage-&gt;imageData, destinationImage-&gt;widthStep * destinationImage-&gt;height );   
Bitmap^ bmp2 = gcnew Bitmap(destinationImage-&gt;width, destinationImage-&gt;height, destinationImage-&gt;widthStep, System::Drawing::Imaging::PixelFormat::Format24bppRgb, ip2);
				
// Bitmapに直接img-&gt;imgDataを読ませると、エラーになるのでコピーデータを渡す(原画を180度回転)
IntPtr ip3( new unsigned char[ des1-&gt;widthStep * des1-&gt;height ] );
memcpy( ip3.ToPointer(), des1-&gt;imageData, des1-&gt;widthStep * des1-&gt;height );   
Bitmap^ bmp3 = gcnew Bitmap(des1-&gt;width, des1-&gt;height, des1-&gt;widthStep, System::Drawing::Imaging::PixelFormat::Format24bppRgb, ip3);
				
// Bitmapに直接img-&gt;imgDataを読ませると、エラーになるのでコピーデータを渡す(原画を270度回転)
IntPtr ip4( new unsigned char[ des2-&gt;widthStep * des2-&gt;height ] );
memcpy( ip4.ToPointer(), des2-&gt;imageData, des2-&gt;widthStep * des2-&gt;height );   
Bitmap^ bmp4 = gcnew Bitmap(des2-&gt;width, des2-&gt;height, des2-&gt;widthStep, System::Drawing::Imaging::PixelFormat::Format24bppRgb, ip4);


これでBitmapに変換できました。

あとは、イメージの読み込みデータを解放してやります
ここでは、かきませんが

cvReleaseImage()関数を使います。(ほとんど書いてますが・・・)

生成した画像、読込んだ画像すべて解放しましょう。


あとは、PictureBoxに格納するだけです。

this-&gt;pictureBox3-&gt;Image = bmp;

このようにかきます

これは、PictureBox3にbmpを格納する、という意味です。

bmpというのは先ほどBitmapに変換したものです。
ほかの３つ画像も同じようにかいてやります。


そして実行してみましょう。
読込んだ画像がボタンをおしたら表示されるようになっているといいな。

実際、書いてる途中で頭ぐちゃぐちゃになったので
どっかでエラーが出てしまうかもしれないので、エラーがでてもう無理だ！ってなったら
聞いてください～。

長くなりましたが、これで課題３の説明です。    </description>
    <dc:date>2009-05-28T14:18:42+09:00</dc:date>
    <utime>1243487922</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/perception_design/pages/18.html">
    <title>メンバー紹介</title>
    <link>https://w.atwiki.jp/perception_design/pages/18.html</link>
    <description>
      *知覚デザインプロジェクトのメンバーをしょうかいします

**先生
&amp;ref(http://stat.ameba.jp/user_images/20090527/14/perception-design/b9/1d/j/t01340178_0134017810187210622.jpg)
岡本誠

&amp;ref(http://stat.ameba.jp/user_images/20090527/14/perception-design/e8/ce/j/t01340178_0134017810187210710.jpg)
小野哲雄

&amp;ref(http://stat.ameba.jp/user_images/20090527/14/perception-design/a4/23/j/t01340178_0134017810187210783.jpg)
ピトヨハルトノ

&amp;ref(http://stat.ameba.jp/user_images/20090527/14/perception-design/24/ca/j/t01340178_0134017810187209993.jpg)
伊藤清英

&amp;ref(http://stat.ameba.jp/user_images/20090527/14/perception-design/16/63/j/t01340178_0134017810187211327.jpg)
佐藤直行


**TA
&amp;ref(http://stat.ameba.jp/user_images/20090527/14/perception-design/cc/bb/j/t01340178_0134017810187209396.jpg)
藤本義治

&amp;ref(http://stat.ameba.jp/user_images/20090527/14/perception-design/0a/3f/j/t01340178_0134017810187210060.jpg)
岩附千春


**情報デザインコース
&amp;ref(http://stat.ameba.jp/user_images/20090527/14/perception-design/aa/ac/j/t01340178_0134017810187209597.jpg)
プロジェクトリーダー伊成恵菜

&amp;ref(http://stat.ameba.jp/user_images/20090527/14/perception-design/0e/41/j/t01340178_0134017810187210405.jpg)
高坂理奈

&amp;ref(http://stat.ameba.jp/user_images/20090527/14/perception-design/b3/08/j/t01340178_0134017810187210234.jpg)
小寺要

&amp;ref(http://stat.ameba.jp/user_images/20090527/14/perception-design/15/3e/j/t01340178_0134017810187211418.jpg)
清水鮎穂

&amp;ref(http://stat.ameba.jp/user_images/20090527/14/perception-design/d6/81/j/t01340178_0134017810187209305.jpg)
星亮輔

&amp;ref(http://stat.ameba.jp/user_images/20090527/14/perception-design/40/04/j/t01340178_0134017810187210545.jpg)
牧野信平

&amp;ref(http://stat.ameba.jp/user_images/20090527/14/perception-design/65/7a/j/t01340178_0134017810187211610.jpg)
山口優人

&amp;ref(http://stat.ameba.jp/user_images/20090527/14/perception-design/c7/c6/j/t01340178_0134017810187211769.jpg)
湯澤奈々


**知能システムコース
&amp;ref(http://stat.ameba.jp/user_images/20090527/14/perception-design/54/71/j/t01340178_0134017810187210165.jpg)
川下未央

&amp;ref(http://stat.ameba.jp/user_images/20090527/14/perception-design/d0/b6/j/t01340178_0134017810187211489.jpg)
田代一誠


**情報システムコース
&amp;ref(http://stat.ameba.jp/user_images/20090527/14/perception-design/19/93/j/t01340178_0134017810187209517.jpg)
五十嵐勇一

&amp;ref(http://stat.ameba.jp/user_images/20090527/14/perception-design/d9/4e/j/t01340178_0134017810187210321.jpg)
小滝陽平

&amp;ref(http://stat.ameba.jp/user_images/20090527/14/perception-design/50/35/j/t01340178_0134017810187210881.jpg)
佐々木亮


**複雑系化学科
&amp;ref(http://stat.ameba.jp/user_images/20090527/14/perception-design/80/97/j/t01340178_0134017810187209219.jpg)
浅見春香

&amp;ref(http://stat.ameba.jp/user_images/20090527/14/perception-design/dd/41/j/t01340178_0134017810187211688.jpg)
横山悟


[[トップページ]]    </description>
    <dc:date>2009-05-27T14:41:05+09:00</dc:date>
    <utime>1243402865</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/perception_design/pages/34.html">
    <title>２００９年５月２５日</title>
    <link>https://w.atwiki.jp/perception_design/pages/34.html</link>
    <description>
      実験報告会

視覚的な刺激によって、体はどう動くのか    </description>
    <dc:date>2009-05-26T23:04:05+09:00</dc:date>
    <utime>1243346645</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/perception_design/pages/13.html">
    <title>先生方からのアドバイス</title>
    <link>https://w.atwiki.jp/perception_design/pages/13.html</link>
    <description>
      ここでは先生方からのアドバイスや名言などを載せていきます


[[２００９年５月１３日]]
「知りすぎると臆病になる」　byハルトノ先生
[[２００９年５月２５日]]
「平均値と標準偏差は常にセットです」　byきよひで先生


[[トップページ]]    </description>
    <dc:date>2009-05-26T22:58:03+09:00</dc:date>
    <utime>1243346283</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/perception_design/pages/32.html">
    <title>OpenCVについての連絡</title>
    <link>https://w.atwiki.jp/perception_design/pages/32.html</link>
    <description>
      このページは[[OpenCV]]の20日までの課題が終了していない人向けのページです。

１、パソコンが修理などでなくてできていない人(インストールから)

今は、みんなパソコンが返ってきてる状態だと思われるので、
各々で、インストールするものをしてブログをみながら設定などを行っていってください。
なお、まだダウンロード、インストールなどが完了していない人は、学校のネットワークは非常に遅くOpenCVの環境を整えるには適していないと思われるので、各自家でダウンロード、インストールをしてきてください。


第1回目の課題【カメラの画像を表示させる】の課題は、初めから自分のパソコンでやってた人たちはほぼ完成しているというのが現状なので、これからインストールなどをする人にもやってもらいたいと思います。

まだ、誰が最後にプログラムを組むかなどは決まっていませんが、
決まっていないからこそ、みんなで力をつけていかないといけないと思いますのでご理解ください。


２、既に、第2回の課題【ウィンドウに画像を表示する】の課題に取り掛かっている人でまだ完成していない人

今日、確認したところたぶんみんなに資料がいきわたってると思いますので
各々で課題を進めていってください。
また、今日(20日)のプロジェクトでこのwikiでの書き方でやるとエラーがでるということが発生しました。
エラーの内容は、デバック無難に終わって実行されウィンドウが出現するが、画像が表示されない。というものです。

このエラーの対処法は、まず、配布した資料などのサンプルプログラムなどを参照して、スペルミスや&quot;＆&quot;の書きわすれなどがないかを確認してください。それでも改善されない場合は、[[OpenCV&gt;http://www12.atwiki.jp/perception_design/pages/17.html]]←ここのページに補足説明を書いておきましたので、エラーが発生した場合はそちらを参照してください。


頑張って全員で完成させましょう！    </description>
    <dc:date>2009-05-20T23:19:12+09:00</dc:date>
    <utime>1242829152</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/perception_design/pages/17.html">
    <title>OpenCV</title>
    <link>https://w.atwiki.jp/perception_design/pages/17.html</link>
    <description>
      *5月20日までの課題【OpenCVを使ってウィンドウに画像を表示させる】について


まだ、課題が終了していない人のために、課題の解説のページを作りました。
このページを参考にして、20日までに課題を完成させてください。
今回は配った資料を見てもわかる範囲の課題だと思いますので、そちらを参考にしてもらっても結構です。


まず、課題のプログラムを書く前にすることがあります。
(ここは資料には載っていません)


**１、プロジェクトの新規作成

「Visual C++」(以下、「VC」)にOpenCVの設定をします。
VCで新規プロジェクトを作成。メニューの「ファイル」から「新規作成」→「プロジェクト」と選択し、「Win32 コンソール アプリケーション」のプロジェクトを作成して、適当なプロジェクト名をつける。
なお、プロジェクト作成の際、「追加のオプション」から「プリコンパイル済みヘッダー」のチェックボックスを外しておく。
参考[[URL]](http://ameblo.jp/fujimonia)より。

これでプロジェクトの作成は完了です。


**２、Visual C++のプロジェクトの設定

これについては、プロジェクトを作成するごとに設定することが必要です。
はるさんのブログを参考にして各自設定をしてください。
参考URL(http://ameblo.jp/fujimonia)の&quot;環境変数のPATHに以下を追加する。&quot;の設定の次からになります。
&quot;以上で設定は完了。&quot;のところまで。


**３、プログラムを書く。

今回配布した資料は、画像を読み込んで、読み込んだ画像をセピア変換して表示するプログラムの資料になります。今回の課題は、画像を読み込んで表示させるだけなので、その部分だけをプログラムに書きます。

***3－1、まず、プログラム中に


#include &quot;stdafx.h&quot;
#include &quot;highgui.h&quot;
#include &quot;cv.h&quot;
#include &quot;cxcore.h&quot;
#include &quot;stdio.h&quot;

をインクルードします。
念のため・・・インクルードとはここでは、include&lt;stdio.h&gt;のようにプログラム中にかくということです。


***3－2、画像の読み込み


OpenCVには

cvLoadImage( &quot;画像のファイル名&quot;, CV_LOAD_IMAGE_ANYDEPTH | CV_LOAD_IMAGE_ANYCOLOR );

という関数があり、この関数を使うことにより、画像を読み込むことができます。

(※なお、この関数を使うと、実行したときにウィンドウは表示されるが、画像が出ない、などが発生する人は、
ファイル名の後を、CV_LOAD_IMAGE_COLOR にしてみて実行してみてください。)

IplImage型の sourceImage に読み込んだ画像を格納します。

プログラムに書くと次のようになります。

IplImage *sourceImage = cvLoadImage( &quot;image/source.bmp&quot;, CV_LOAD_IMAGE_ANYDEPTH | CV_LOAD_IMAGE_ANYCOLOR );


(※画像がでない場合)
IplImage *sourceImage = cvLoadImage( &quot;image/source.bmp&quot;, CV_LOAD_IMAGE_COLOR );



とう感じになります。今回は、bmp形式の画像をimageというフォルダに保存しました。
jpg形式の画像を表示させたいなら、画像の拡張子をjpgなどに変更する必要があります。
とりあえず、画像の名前なので、画像の名前をそのままかいてやれば大丈夫です。

imageフォルダは、Visual C++から実行する場合は、cppファイルと同じフォルダに作り、exeファイルから実行する場合は、exeファイルと同じ場所に置きます。

・cppファイルは(プロジェクト名をtestにした場合)
ドキュメント⇒Visual studio 2008⇒projects⇒test⇒testの中にimageフォルダを作ります。そのフォルダの中に画像をファイルを入れておきます。

・exeファイルは(プロジェクト名をtestにした場合)
ドキュメント⇒Visual studio 2008⇒projects⇒test⇒Debugの中にimageフォルダを作ります。そのフォルダの中に画像をファイルを入れておきます。

今回は、どちらの方法でも動作することを確認するために、どちらのフォルダにもimageフォルダを置き、画像を格納しました。



***3－3、画像が見つからなかった場合の処理


sourceImage に画像が格納されているはずなので、中身がNULLの場合、画像が見つからなかった(正しい場所に画像が格納されていない)ということになります。

その場合に、&quot;画像が、見つかりません！&quot;というエラーメッセージを表示させるところを一応作っておきます。
今回は、画像を正しい場所に入れておくという前提でやりますが、後々のプログラムでエラー処理は必要だと思いますので。

if文で分岐します。

条件は、上にも書いた通り

if(sourceImage = NULL){

printf(&quot;画像が見つかりません&quot;);
return -1;

}

これで完了です。



***3－4、読み込んだ画像を表示させるウィンドウの生成

次に読み込んだ画像を表示させるためのウィンドウの生成を行います。
OpenCVの関数の中に、ウィンドウを生成する関数があります。

それが

cvNamedWindow( const char* name, CV_WINDOW_AUTOSIZE);

になります。
この関数で、ウィンドウを生成できます。

今回は、Sourceという名のウィンドウを生成します。
ここで、char型の配列 windowNameSource[]に&quot;Source&quot; を格納しておきます。

char windowNameSource[] = &quot;Source&quot;;

プログラムに書くと次のようになります。

cvNamedWindow( windowNameSource, CV_WINDOW_AUTOSIZE);

これで、ウィンドウの生成は完了です。



***3－5、読み込んだ画像を表示

やっと、ここで読み込んだ画像を表示させます。
ここでも、OpenCVの関数を使います。
ここで使うのは

cvShowImage( &quot;画像を表示するウィンドウの名前&quot;,  &quot;画像の格納されているIplImage型の変数&quot; );

となります。

今回は

表示するウィンドウの名前 : windowNameSource

画像の格納されている変数 : sourceImage

なのでプログラムに書くと

cvShowImage( windowNameSource, sourceImage );

となります。


***3－6、キー入力を待つ処理

プログラムが動いている間にキー入力を待つ処理をします。

//キー入力を待つ
cvWaitKey( 0 );

を使います。cvWaitKey()が、0の場合はキーが押されるまで待ちます。
このプログラムは、何かキーを押した瞬間にウィンドウが閉じます。
とりあえず、この関数を入れておいてください。



***3－7、後片付け

プログラムを終了する前に、cvReleaseImage() 関数を使って確保したメモリを解放してやる必要があります

プログラムにかくと以下のようになります。

cvReleaseImage( &amp;sourceImage );

今回は、画像をsourceImageに格納したので、それを解放してやります。

そして、同じようにウィンドウを破棄します。
ウィンドウの破棄には、cvDestroyWindow()関数を使います。
プログラムに書くと以下のようになります。

cvDestroyWindow( windowNameSource );


あとは、return 0を返して終了です。


今までいろいろ書きましたが、資料のサンプルプログラムを参考にしてやればできると思います。
サンプルプログラムでの、セピア変換する部分を抜き、今回の課題に合うように変えてやれば完成です。


最後に、Visual C++の左側に出ている、ソリューションエクスプローラーをいじります。

ソースファイルにDirectShow.cpp
ヘッダファイルにDirectShow.h、ewclib.hを追加してください。

そうすると、ソースファイルが３つ、ヘッダファイルが４つになると思います。
追加の仕方は、ソースファイル(ヘッダファイルの場合はヘッダファイル)を右クリック⇒追加⇒既存の項目を選択すれば、出でくると思いますので、追加してください。

また、既存の項目を選択しても出てこないという人は、保存している場所が違う場合があります。

既存の項目で開くのは自分のプロジェクトフォルダのcppファイルのあるフォルダです。
なので、DirectShow.cpp、DirectShow.h、ewclib.hは、cppファイルのフォルダにコピーしておくことをおすすめします。

そして、実行して、dllファイルが見つかりません。などのエラーが出た場合は、dllファイルは、Visual C++からの実行の場合は、cppファイルのある場所、exeファイルからの実行の場合は、exeファイルのある場所に入れておかないといけないので、それらもコピーしてやるとエラーがなくなると思います。

ちなみに、dllファイルの場所は、OpenCVのフォルダのbinフォルダに入っていると思いますのでdllファイルすべてコピーしてください。


これで一通りできると思いますが、書き忘れていることもあるかもしれないので、エラーが消えないとかあったら、連絡してもらえると答えられるかもしれません。。    </description>
    <dc:date>2009-05-20T20:21:39+09:00</dc:date>
    <utime>1242818499</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/perception_design/pages/31.html">
    <title>予定表</title>
    <link>https://w.atwiki.jp/perception_design/pages/31.html</link>
    <description>
      予定表

#google_calendar(){{
&lt;iframe src=&quot;http://www.google.com/calendar/embed?src=b1007092%40fun.ac.jp&amp;ctz=Asia/Tokyo&quot; style=&quot;border: 0&quot; width=&quot;800&quot; height=&quot;600&quot; frameborder=&quot;0&quot; scrolling=&quot;no&quot;&gt;&lt;/iframe&gt;
}}    </description>
    <dc:date>2009-05-20T17:28:03+09:00</dc:date>
    <utime>1242808083</utime>
  </item>
  </rdf:RDF>
