2008年12月22日

Interface 2007年5月号 V850基盤でマイコン開発

今回から、雑誌 Interface[2007/5](fig.1)に付属されているV850基盤でマイコン開発を学びたいと思います。尚、WebCameraも平行して投稿を行っていきます。



fig.1[広告]

そもそも、マイコンとは?

マイクロコンピュータ[Micro Computer]の略名です。
小さなコンピュータですね。
コンピュータとは計算機のこと。
つまり、小さな計算機ってこと。
参考ページ:@IT MONOist[マイコンと呼ばれるモノの正体とは?]


触ってみよう
Interface [2007/5]には、下記のマイコン基盤「CQ_V850」(以下、基盤)
と開発一式を収録したCD-ROMが付属しています。












fig.2 CQ_V850基盤

さっそくやってみようと思ったら、
梱包上の理由から実装していない
部品を下記表1に書きます。
※[]内は、数量を示す。

                    表1

       品名                  品番          
  1. 水晶発振子[1]            32.768kHz   
  2. 電源コネクタ [1]          DF1B_2P_2.5DSA  
  3. ヘッダ・ピン(40ピン)[2]       A1-40PA-2.54DS  
  4. ヘッダ・ピン(10ピン) [1]      10P
  5. USB Bタイプ/ライト・アングル[1] CU02SAH0000
  6. ジャンパ・ピン[3]           -
  7. ショート・プラグ[3]           -
となっています。
早速、部品を購入してきました。
下記に示します(上記番号と対応)。












fig.3  7.ショートプラグ













fig .4  3・4・6.ヘッダ・ピン(40ピン、10ピン)、ジャンパ・ピン











fig.5   2.電源コネクタ











fig.6 1.水晶発振子












fig.7 5.USB Bタイプ


あと、USBケーブルです。










fig.8    USBケーブル


合計:1319円でした。

あと、はんだこても購入しました。

fig.9  はんだこて

やっと、準備が整いましたので、
早速、やってみましょう!!

まずは、購入してきた部品を基盤の適切な箇所にはんだ付けを行います。
はんだ付け後の基盤を下記に示します。










fig.10 1.水晶発振子、6.ジャンパ・ピン、
    3・4.ヘッダ・ピン、5.USB Bタイプを
    実装した基盤

次にPC(ホスト)に付属のデバイス・ドライバ(CP2102)をインストールし、
USBケーブルをPC(ホスト)から、基盤に装着します。










fig.11  USBそーちゃく!!

デバイスドライバーより
ポートの確認を行う(僕の場合:COM4)。
次にTeraTermソフトを使って、
基盤からA-D変換データを表示します。
下記に示します。












fig. 12 TeraTerm画面(A-D変換データ)


とりあえず、今日はここまで!!

動画表示と静止画保存

前回の静止画を連続表示することで、
動画を表示してみました(fig.1 左画像)。
fi.1は、アプリケーションが起動すると、
左側に動画を表示します。










            fig.1


次に、前回の静止画処理を付け加えました(fig.2 右側)。
左側の「ShowImage」ボタンを押すと、その瞬間の画像が
右側のピクチャボックスに表示されます。













             fig.2

※fig.1,2の画像は、カメラをディスプレイに向けて、撮影したものに
なっています。再帰的になってますね^^

以下にコードを示します。
---------------------view.h

ref class cvView

{

private:
public:
CvCapture *capture; //カメラキャプチャ用の構造体
IplImage *frameImage;
IplImage *Image; //キャプチャ画像用のIplImage
IplImage *CaptureImage;

//デフォルトコンストラクタ(カメラ初期化含む)
void View(void);
//カメラからの入力画像1フレームをframeImageに格納
void cvInputFrame(void);
//Imageの回転処理
IplImage* cvSpinImage(IplImage* inputImage, int width, int height, double angle, double scale);
//ImageをBitmap変換
Bitmap^ cvConvertBitmap(char* imageData, int imageSize, int imageWidth, int imageHeight);


}


----------------------view.cpp
#include "StdAfx.h"
#include "View.h"

//デフォルトコンストラクタ
;void cvView::View(void){
//カメラ初期化
capture = cvCreateCameraCapture(-1);

}

//カメラからの入力画像1フレームをframeImageに格納
void cvView::cvInputFrame(void){

frameImage = cvQueryFrame(capture);
}

//Imageの回転処理
IplImage* cvView::cvSpinImage(IplImage* inputImage, int width, int height, double angle, double scale){
//変換後の画像用IplImage
IplImage* outputImage = cvCreateImage(cvGetSize(inputImage), IPL_DEPTH_8U, 3);
CvPoint2D32f center = cvPoint2D32f(width/2.0, height/2.0);
//行列を生成する
CvMat *rotationMatrix = cvCreateMat(2, 3, CV_32FC1);
//変換行列を求める
cv2DRotationMatrix(center, angle, scale, rotationMatrix);
//画像の回転を行う
cvWarpAffine(inputImage, outputImage, rotationMatrix, CV_INTER_LINEAR | CV_WARP_FILL_OUTLIERS, cvScalarAll(0));

return outputImage;
}

//ImageをBitmap変換
Bitmap^ cvView::cvConvertBitmap(char* imageData, int imageSize, int imageWidth, int imageHeight){

Bitmap^ bmp = gcnew Bitmap( imageWidth, imageHeight, Imaging::PixelFormat::Format24bppRgb);
Imaging::BitmapData^ bmpData;
bmpData = bmp->LockBits(System::Drawing::Rectangle(0, 0, bmp->Width, bmp->Height), Imaging::ImageLockMode::ReadWrite, bmp->PixelFormat );
memcpy( bmpData->Scan0.ToPointer(), imageData, imageSize );
bmp->UnlockBits(bmpData);

return bmp;
}

------------------------------------------Form1.h
private: System::Void Form1_Load(System::Object^ sender, System::EventArgs^ e) {
//デフォルトコンストラクタ(カメラ初期化含む)
view.View();
this->label1->Text = "Find Camera";


}
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
//ShowInmage btn
view.cvInputFrame();

view.Image = view.cvSpinImage(view.frameImage, view.frameImage->width, view.frameImage->height, ANGLE, SCALE);
//取得、加工した画像をピクチャボックスに表示
pictureBox2->Image = view.cvConvertBitmap(view.Image->imageData, view.Image->imageSize, view.Image->width, view.Image->height);


}
private: System::Void pictureBox1_Paint(System::Object^ sender, System::Windows::Forms::PaintEventArgs^ e) {
//動画表示
view.cvInputFrame();

view.Image = view.cvSpinImage(view.frameImage, view.frameImage->width, view.frameImage->height, ANGLE, SCALE);

pictureBox1->Image = view.cvConvertBitmap(view.Image->imageData, view.Image->imageSize, view.Image->width, view.Image->height);


}
private: System::Void button4_Click(System::Object^ sender, System::EventArgs^ e) {
//ImageSave btn
//画像を保存
cvSaveImage("testCapture.bmp",view.CaptureImage);
}
};
}

以上です^^

2008年8月11日

静止画像の表示

とりあえず、[ShowImage]buttonを押すとpictureBox1に静止画像を表示してみました(fig.1)。

                 fig.1
以下がインクルードファイルです。
#include "stdio.h"
#include "highgui.h"
#include "cvaux.h"

以下がbutton event 内のソースになります。

//カメラキャプチャ用の構造体
CvCapture *capture;
//キャプチャ画像用のIplImage
IplImage *Image;

//カメラを初期化をする
if((capture = cvCreateCameraCapture(-1)) == NULL){
  //カメラが見つからなかった場合
  this->label1->ForeColor = System::Drawing::Color::Red;
  this->label1->Text = "Not Find Camera";
  return;
}else{
  this->label1->Text = "Find Camera";
}

//カメラからの入力画像1フレームをframeImageに格納する
Image = cvQueryFrame(capture);

//画像を生成する
IplImage *frameImage = cvCreateImage(cvGetSize(Image), IPL_DEPTH_8U, 3);

//画像の中心を求める
CvPoint2D32f center = cvPoint2D32f(Image->width/2.0, Image->height/2.0);

//行列を生成する
CvMat *rotationMatrix = cvCreateMat(2,3,CV_32FC1);

//変換行列を求める
cv2DRotationMatrix(center, ANGLE, SCALE, rotationMatrix);

//画像の回転を行う
cvWarpAffine(Image, frameImage, rotationMatrix, CV_INTER_LINEAR | CV_WARP_FILL_OUTLIERS, cvScalarAll(0));

//BMPCalssを用意
Bitmap^ bmp = gcnew Bitmap( frameImage->width, frameImage->height,   Imaging::PixelFormat::Format24bppRgb);

//IplImageをBitmapに変換
Imaging::BitmapData^ bmpData;
bmpData = bmp->LockBits(System::Drawing::Rectangle(0, 0, bmp->Width, bmp->Height), Imaging::ImageLockMode::ReadWrite, bmp->PixelFormat );
memcpy( bmpData->Scan0.ToPointer(), frameImage->imageData, frameImage->imageSize );
bmp->UnlockBits(bmpData);

// ピクチャボックスに表示
pictureBox1->Image = bmp;

//キャプチャを開放する
cvReleaseCapture(&capture);

以上。

2008年8月10日

とりあえず、Sampleで画像を表示するアプリをつくってみました!

とりあえず、下記のようなSample Formをつくりました(fig.1)。
Sampleは、ShowImageボタンを押下すると、pictureBox1に画像表示されます。

                  fig.1

早速、#include "highgui.h"を読み込むとエラー発生!(fig.2)

                 fig.2

これは、何ですか?よく分りません。
調べてみると、cxtypes.h"内 の 関数"cvRound()"の定義で、"__asm"を使っているからエラーが出ているようです。以下のサイトを参考にさせてもらいました。ありがとう、とりあえずエラーを回避できましたm(_ _)m。
(参考url:机上の空論-2006年6月アーカイブ-[メモ] VS2005 で OpenCV)

プロジェクトのPATH設定

プロジェクトのPATH設定
次にメニューから[プロジェクト]を選択、プロジェクトの[プロジェクト名+プロパティ]選択すると、プロパティページダイアログが表示される。
左側のツリー一覧の[構成プロパティ]⇒[リンカ]⇒[入力]を選択する。
右側の追加ファイル項目に以下のlibを追加する(fig.1)。

cvcam.lib highgui.lib cxts.lib cv.lib cxcore.lib ml.lib cvaux.lib cvhaartraining.lib

                fig.1
入力が完了したら、[OK]でダイアログを閉じる。

以上でVC++でのOpenCVの設定パスは終了。

2008年8月6日

VC++ 2005  プロジェクト作成とVC++でのPATHの設定

プロジェクト作成
[ファイル]⇒[新しいプロジェクト]
プロジェクトの種類を[Visual C++]、テンプレートを[Windowsフォームアプリケーション]を選択し、プロジェクト名を入力し、[OK]ボタンを押下する(fig.1)。
fig.1

VC++でのPATH設定
[ツール]⇒[オプション](fig.2)                fig.2

[オプション]ダイアログの左側メニュー⇒[プロジェクトおよびソリューション]⇒[VC++ディレクトリ]を選択する。右側の[ディレクトリを表示するプロジェクト]のプルダウンメニューより、[インクルードファイル]を選択する。(fig.3)
                fig.3

[新しい行]ボタンを押下し、以下のパスを追加する(fig.4)。

C:\Program Files\OpenCV\cv\include
C:\Program Files\OpenCV\cvaux\include
C:\Program Files\OpenCV\cxcore\include
C:\Program Files\OpenCV\otherlibs\highgui

                 fig.4

次に[ディレクトリを表示するプロジェクト]のプルダウンメニューより、[ライブラリファイル]を選択し、以下のパスを追加する(fig.5)。

C:\Program Files\OpenCV\lib

                fig.5


以上で、Visual Studio C++ 2005 側の設定が終了。

2008年8月5日

OpenCV for VC++2005

OpenCV(Open Source Computer Vision Library)とは、Intelが公開している画像処理ライブラリです。これを用いれば、動体検知やエッジ検出などの画像処理が比較的簡単にできます。

OpenCVでなにか作りたいなって事で、そのメモにBlogを使用します。
以下に環境を示します。

環境

OS:Windows Vista Home Premium
プロセッサ:2.66GHz
メモリ:2GB

開発環境:Microsoft Visual C++ 2005
使用カメラ:CMS-V22SETBK(url:http://www.sanwa.co.jp/product/syohin.asp?code=CMS-V22SETBK&cate=1)




そして、OpenCVです。




OpenCVは以下からダウンロードします。

http://sourceforge.net/projects/opencvlibrary/

ダウンロード
上記のサイトの[Download Open Computer Vision Library]をクリックします。
遷移したページのLatest File Releases表内のOpenCV_1.0.exeをダウンロードします。

インストール
次にOpenCVをインストールします。
ダウンロードしたOpenCV_1.0.exeを実行します。
以下にインストール手順を示します。

1.[Next]⇒[I accept the agreement]にチェック
2.Next⇒Next⇒Next⇒[Add<....>\OpenCV\bin to the System PATH]にチェック
3.Next⇒Install でインストール開始
4.Finishでインストール完了