2010年12月17日金曜日

dshow.hがインクルードできない?

開発環境をeclipseに集約しようと、ここ数カ月踏ん張ったが断念。
画像処理の研究を進めるにはやはり慣れた環境が一番と再度気付かされました。(^^;A

ということでWindowsでの開発に戻る。といってもOpenCV使うと何でもできてしまい、全然理解しないまま結果を見て喜ぶのもなんなので、DirectShowを使ってゴリゴリとコーディングしようと思っていた矢先、dshow.hがインクルードできないと出足をくじかれる。

PlatformSDK入れたはずなのに、dshow.hもなければstrmiids.libもない。検索掛けるとPlatformSDKのフォルダはあるのに、これらファイルがない!Why?Why?Why?

ということで、Microsoftのページからインストーラを落としてきて再度インストール。うまくいくかな?

2010年12月11日土曜日

syntaxhighlighterスクリプトの実験

ブログ上でソースコードを綺麗に表示するスクリプトを試してみる。


#include

int main( int argc, char **argv )
{
printf("Hello World!\n");

return 0;
}


お、すごい!!結構簡単にでけた。

【参考】
http://www.materializing.net/archives/2010/10/03134928.php

2010年10月25日月曜日

Eclipse環境構築

C,C++,Java,PHP,Rubyなど、開発時の言語がやたら増えてきたのでEclipseですっきりすることにした。
Eclipseは、ファイルをダウンロードして解答したら一応使えるので、USBメモリなどに入れて「開発環境持ち運び」が可能。

が、絶対パス指定の設定がたまにあり、環境が変わると動かなくなることも・・・(これには参った・・・)
諦めた掛けたとき、ドライブレターを固定する方法を見つけ、なんとか解決。

「日本語化されたAll-in-onパッケージであるpleiades3.6のインストールについて覚書」

<ドライブの固定方法>
1.外部記憶媒体(USBメモリ、USBハードディスク等)を用意し、コンピュータに接続。
(適当なドライブレター(F:など)が付いて認識されるはず)。

2.上記の中に、ドライブとして利用するフォルダを作成する。名前は何でもよい(ここでは、「G_DRIVE」とする)。

3.G_DRIVEフォルダの中に、適当な名前のバッチファイルをメモ帳などで作成する(ここでは、「g_drive.bat」とする)。ファイル中身は、「SUBSET G: %CD%」の1行のみ。

4.g_drive.batを実行(ダブルクリック)。すると、このフォルダがGドライブとして割り当てられる(マイコンピュータから確認してみよう)。

5.あとは、このG_DRIVEフォルダにpleiades3.6をインストールすれば、常にGドライブで使用することができる。つまり、異なるコンピュータに差した時に、3.で作成したバッチファイルを実行すればいつでもGドライブ内での環境になる。ただし、もともとGドライブがある場合はダメですが・・・
-----
<pleiades3.6のインストール>

1.下記サイトから「pleiades 3.6」をダウンロード。ultimateだと全て入っています(ここでは、ultimateとする)。
http://mergedoc.sourceforge.jp/

2.ダウンロードしてきたファイルをGドライブ直下へ移動。アドレスが「G:\」となっているようにしたほうが良い。「F:\G_DRIVE」のようになっているとまずかいも・・・

3.ダウンロードしてきたファイルを解凍する。ダウンロードサイトの下のほうにも記述されているが、LhacaやLhaplusなどでダウンロードしたファイルを解凍すると、名前の長さなどでエラーになり良くないらしいので、WINRARを落としてきて解凍する(ここでは、pleiades」というフォルダ名の中に解凍するとする)。

4.「G:\pleiades\eclipse」の中にある「ecllipse.exe」ファイルを実行(ダブルクリック)。最初は少し時間がかかるが、開発環境が現れたらOK。
-----
<C/C++言語開発>
1.「ファイル」→「Cプロジェクト」(またはC++プロジェクト)を選択。

2.プロジェクト名を適当に付け、プロジェクトタイプを「実行可能」の「空のプロジェクト」を選択し、「完了」ボタンを押す。

3.プロジェクトが完成するので、あとは、Cファイルを作成し適当なコードを記述して、ビルド、実行すればOK。
-----

2010年6月22日火曜日

Digiclops+OpenCVその2

CV_MAT_CNって何?

cxtypes.hに定義されていました。
-----
#define CV_MAT_CN(flags) ((((flags) & CV_MAT_CN_MASK) >> CV_CN_SHIFT) + 1)
-----
CV_MAT_CN_MASK?
-----
#define CV_MAT_CN_MASK ((CV_CN_MAX - 1) << CV_CN_SHIFT)
-----
CV_CN_MAX? CV_CN_SHIFT?
-----
#define CV_CN_MAX 64
#define CV_CN_SHIFT 3
-----
ということは、CV_MAT_CN_MASKは
-----
#define CV_MAT_CN_MASK ((64 - 1) << 3)
つまり
#define CV_MAT_CN_MASK ((63) << 3)
ということは「00111111」を3ビット左シフトなので「1 11111000」。
-----
従って、CV_MAT_CNは、
-----
#define CV_MAT_CN(flags) ((((flags) & 1 11111000) >> 3) + 1)
-----
ということです。flagsの値にマスクをかけて3ビット右シフトして1を足すということでね(なんのこっちゃ)。ここでflagsにはCvMat型のtype属性が多いので、それを確認。こちらはファイルには何も説明が載っていなかったので、リファレンスを確認。
-----
typedef struct CvMat
{
int type; /* CvMat シグネチャ (CV_MAT_MAGIC_VAL).要素の型とフラグ */
(略)
}
-----
このtypeは、CV_8UやCV_16Uなどの型。ファイルには、
#define CV_8U 0
#define CV_8S 1
#define CV_16U 2
#define CV_16S 3
#define CV_32S 4
#define CV_32F 5
#define CV_64F 6
#define CV_USRTYPE1 7
と定義されています。つまり大きなデータを使うと数字があがっていくわけですね。さらに、CV_16UC3などのような定義もされています。
------
結論としては、色を使えば使うほど、精度を良くすればするほど、値が上がるってことです(アバウト~)。

2010年6月9日水曜日

Digiclops+OpenCVその1

Digiclopsで取得した画像をOpenCVで扱う際にとても苦労した。
Digiclops(Triclops)から得られる画像はカラー画像と思い、

CvSize imageSize = cvSize(DEFAULT_IMAGE_WIDTH, DEFAULT_IMAGE_HEIGHT);
image = cvCreateImage(imageSize, IPL_DEPTH_8U,3);

とチャンネル3の画像で受け取り表示したのが、そもそもの間違い。ここでエラーを出してくれればいいものの(勝手です、はい・・・)、このままでウインドウに表示されるのです。何の疑いもなくそのままプログラミングを続けていったら、cvCopyやcvCvtColorなどの関数でエラーが連発し撃沈。

得に、ハフ変換などして線分を抽出した後に線分の色を赤にして元画像に埋め込んだりする時にどうしてもエラーの内容が分からず彷徨う結果に・・・。

つまり、カメラからの画像は、

CvSize imageSize = cvSize(DEFAULT_IMAGE_WIDTH, DEFAULT_IMAGE_HEIGHT);
image = cvCreateImage(imageSize, IPL_DEPTH_8U,1);

で受けて、そのあと、

cvCvtColor(image, show_image, CV_GRAY2RGB);

とRGBに変換して

cvShowImage("ウインドウ名前", show_image);

とすれば一見落着。プログラムが大きかったので原因を突き止めて解決するまで半日を要しました。(-.-)ふ~

とりあえず無意味なハフ変換を載せておきます。