スポンサーサイト [Edit]
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。


スポンサー広告 | 【--------(--) --:--:--】 | Trackback(-) | Comments(-)
VistaでOpenCV [Edit]
Virtual PC 2007で試した時は問題なかったけど,よく考えたらUSBカメラとの接続はやってなかった.

んで,ネイティブにインストールしたRC2にOpenCV1.0いれてキャプチャしてみたら・・・動かない.

orz...

追記.できないと思っていたら,どうもUSBドライバが悪さをしていたらしく,入れ直したらうまくいった.よかったよかった

スポンサーサイト
[プログラム]OpenCV | 【2006-11-01(Wed) 13:50:22】 | Trackback:(0) | Comments:(0)
cvMatから画素値の取得 [Edit]
IpliImageから画素(i,j)のデータを取得するには,

IpliImage ipliImage;
int r,g,b,i,j;
r =(uchar) ipliImage->imageData[i *ipliImage->widthStep+ j * ipliImage->nChannels + 2];
g =(uchar) ipliImage->imageData[i *ipliImage->widthStep+ j * ipliImage->nChannels + 1];
b =(uchar) ipliImage->imageData[i *ipliImage->widthStep+ j * ipliImage->nChannels + 0];

ってやればいいわけだけど,これと同じ事がcvMat構造体でもできる.すなわち,

CvMat cvMat;
r = cvMat->data.ptr[i *ipliImage->widthStep+ j * ipliImage->nChannels + 2]);
g = cvMat->data.ptr[i *ipliImage->widthStep+ j * ipliImage->nChannels + 1]);
b = cvMat->data.ptr[i *ipliImage->widthStep+ j * ipliImage->nChannels + 0]);

でOK.

[プログラム]OpenCV | 【2006-10-05(Thu) 09:54:48】 | Trackback:(0) | Comments:(0)
OpenCVでIEEE1394接続デジタルビデオカメラ(SONY) [Edit]
cvCaptureFromCAMは成功するが,cvQueryFrameで失敗する.Yahooグループを検索してみたが,どうもWindowsでは使えないらしい.残念.

ちなみにビデオカメラのモデルはSONY DCR-PC300.

だれかやりかた知ってたら教えてくれ~

[プログラム]OpenCV | 【2006-08-04(Fri) 09:36:46】 | Trackback:(0) | Comments:(0)
OpenCVで物体検出 - performance.exe [Edit]
haartraining.exeが終了したら,指定したフォルダにカスケード識別器がステージ毎のフォルダとして生成されている.ここでは"classifier/test"と指定していたので,ここに0~3が生成されるはず.

生成した識別器の能力を調べる方法として,"performance.exe"がある.これはhaartraining.exeで作った識別器データを使って,物体の座標と大きさ及び画像ファイル名を指定したテストファイルを読み込むことで,その物体が抽出されたか,他の関係ない物体は抽出されなかったか,等をはき出してくれる.また検出結果は画像ファイルとしても保存される.

テストファイルとは,例えばこんな感じ.

lena.jpg 1 180 180 210 210

最初が画像ファイル名で,2番目が物体の数.で後は座標(左上)と大きさを物体数分書く.画像ファイルのパスはテストファイルからみた相対パス.この場合だと,同じフォルダにある.

テストファイル"test/test.txt"を作成したら,次のコマンドで実行する.

performance.exe -data classifier/test -info test/test.txt -w 24 -h 24

-dataが利用する識別器,-infoがテストファイル.実行すると,コマンドプロンプトにHitsとMiss,Falseが表示され,それぞれ正しく検出,未検出,誤検出となる.

[プログラム]OpenCV | 【2006-07-25(Tue) 17:18:52】 | Trackback:(0) | Comments:(0)
OpenCVで物体検出 - haartraining.exe [Edit]
引き続きOpenCVでの物体検出について述べよう.

ポジティブサンプルを作成したら,次はいよいよトレーニング.

haartraining.exe -data classifier/test -vec vec/positive.vec -bg bg/negative.txt -npos 100 -nneg 100 -mem 2000 -minhitrate 0.90 -maxfalsealarm 0.01 -nstages 3 -w 24 -h 24

"-data"引数には作成するカスケード識別器名を記述する.ここではclassifierディレクトリの下のtestディレクトリとして作成される.testディレクトリの下に,トレーニング後の各ステージのパラメータがテキストとして保存される.

"-vec"引数にはcreatesamples.exeで作成したポジティブサンプルデータを指定する.

"-bg"引数にはネガティブサンプル画像を指示したbackgroundファイルを指定する.中身はこんな感じ.

../negative_samples/neg_1.jpg
../negative_samples/neg_1.jpg
...
../negative_samples/neg_100.jpg

"-npos", "-nneg"はそれぞれ使用するポジティブ及びネガティブサンプル数.ネガティブサンプルは指定したファイルから自動的に切り取られて作成されるので,"-nneg"=画像数としなくても良い(みたい?).

"-mem"引数にはPCがプログラムに割り当てるメモリー量を設定する.この値が大きければ一時的に使用する変数を常に確保して処理できるので速く処理が進む(らしい).

"-minhitrate"引数には各カスケードステージで保証する検出率を指定する.最終的な検出率は後の"-nstages"引数により,-minhitrateの-nstages乗となる(0.90%,10stagesなら0.35%, 0.99なら0.90).

"-maxfalsealarm"引数には各カスケードステージで保証する誤検出率を指定する.最終的な誤検出率は"-nstages"乗となる(0.01%,10stagesなら1E-20%, 0.1%なら1E-10%).

"-nstages"はカスケードステージ数.上述のように,ステージ数は最終的な検出率・誤検出率に影響する.当然増やせば処理時間がかかる.

"-w, -h"引数にはポジティブサンプルのサイズを指定する.

実行すると,コマンドプロンプトにいろいろ表示されて,トレーニングの様子がわかる.

ちなみに,-nposは3000,-nnegは7000ぐらいないと,-nposは7000,-nnegは3000ぐらいないと,ちゃんとしたものは作れないらしい.

[プログラム]OpenCV | 【2006-07-05(Wed) 16:41:46】 | Trackback:(0) | Comments:(0)
OpenCVで物体検出 - createsamples.exe [Edit]
なんとか自前でトレーニングしてテストできる環境になったので,忘れる前に書いておこう.

ディレクトリの初期構造は以下の通り.各exeファイルはOpenCVのインストールディレクトリから取ってこよう(ひょっとするとビルドし直さないといけないかも?).

bg/
 negative.txt
classifier/
positive_samples/
 pos_1.jpg
 pos_2.jpg
 ...
 pos_100.jpg
negative_samples/
 neg_1.jpg
 neg_2.jpg
 ...
 neg_100.jpg
test/
 lena.jpg
 test.txt
vec/
xml/
createsamples.exe
facedetect.exe
haarconv.exe
haartraining.exe
performance.exe
positive.txt


OpenCVの顔検出プログラム"facedetect.exe"では,"haartraining.exe"で学習したxmlファイルを利用している.これはサンプルとしてOpenCVに付いてくるのだが,他の物体を検出したい場合は自作しないといけない.

トレーニングするには,検出したい物体を含んだ"ポジティブ"サンプルと,検出したい物体を全く含んでいない"ネガティブ"サンプルが必要になる.それぞれのサンプルは画像ファイル.

ポジティブサンプルファイルには物体が複数含まれていても良いし,サイズの上限は特にない?(未確認),全てのファイルが同じサイズ,つまり物体の領域で切り抜いた画像ファイルになっていても良い.ただし,トレーニングするときに画像ファイル中の物体数とそのxy座標(左上原点),物体のサイズを指定する必要があるので,あらかじめ物体領域を切り出しておいて,サイズを全て揃えておいた方が楽なのかもしれない.

ネガティブサンプルには物体が含まれていなければ良いだけなので,特に気にしなくても良いと思うが,簡単な特徴ばかりの画像を持ってくるとあまり意味がない(同じ画像だらけになる)ので,複雑な背景画像を持ってきた方が良いかもしれない(未確認).

最初に,自分で集めたポジティブサンプル画像を,haartraining.exeが読み込めるデータに変換する.

createsamples.exe -info positive.txt -vec vec/positive.vec -num 100 -w 24 -h 24

"positive.txt"に画像ファイルへのパスと,含まれる物体数及び座標を記述する."positive_samples/"の下にある画像を参照するこの例だと,

positive_samples/pos_1.jpg 1 0 0 24 24
positive_samples/pos_2.jpg 1 0 0 24 24

とする(当然pos_100.jpgまで書く).ここでは画像ファイルそのものが24x24の物体だとした.

画像のある位置に物体が含まれているような,例えば人が写っていて人の顔を物体として検出するような場合,例えば"lena.jpg"(C:/Program Files/OpenCV/samples/c/にあり)なら,

lena.jpg 1 200 200 180 180

といった具合に指定する.

その他の引数は,"positive.vec"が生成されるデータファイル名,-numの引数がポジティブサンプル数,-w, -hは物体の基本画像サイズ.このサイズが検出する時の最小物体画像サイズになるので注意.

次回はhaartraining.exeについて書こう.

[プログラム]OpenCV | 【2006-06-23(Fri) 18:36:00】 | Trackback:(0) | Comments:(0)
OPenCVで簡単USBカメラキャプチャ [Edit]
http://chihara.naist.jp/people/2004/kenta-t/OpenCV/pukiwiki/の"カメラ利用の基本形"を参考に,PCに繋がっているUSBカメラの映像をキャプチャして表示する簡単なプログラムを作った.といってもコピペして動作確認しただけだけど.

最初,ビルドは成功するんだけど、実行したらエラーがでて動かない。どうも"cvCaptureFromCAM()"関数が使えないという状況.理由がわからずしばし悩んだが,OPenCVのsampleプロジェクトはコンパイルできるので(同じ関数が使われてる),両者の違いを調べてみると,プロジェクトのプロパティで,"全般→マネージ拡張"が違うことに気づく.自分のプロジェクトは"はい"になっていたので,"いいえ"にすると見事実行できた.

OPenCVで簡単キャプチャ

DirectShowに比べてかなり簡単.数十行でキャプチャしてデータ取得して表示できる.あぁ,最初っからOPenCVがあれば良かったなぁ(あったのかなぁ...).

これから画像処理系勉強する人,OPenCV使った方がいいかもよ.

あ,ちなみに動作確認したUSBカメラはpersolのPBC003っていう一昔前のやつ.もう売ってないですね...たぶん主要なメーカのやつなら大丈夫でしょう.
PBC003 USB2.0対応WEBカメラ・ヘッドセットパック PBC003 USB2.0対応WEBカメラ・ヘッドセットパック
()
パーソル

この商品の詳細を見る

あと,Logitech(ロジクール?)のQV-700N Qcam for NoteBooks Proっていうのでも確認できましたよ.
LOGICOOL QV-700N Qcam for NoteBooks Pro LOGICOOL QV-700N Qcam for NoteBooks Pro
(2002/11/29)
ロジクール
この商品の詳細を見る


[プログラム]OpenCV | 【2006-06-23(Fri) 11:41:00】 | Trackback:(1) | Comments:(0)
次のページ
FC2カウンター
現在の閲覧者数:
リンク
RSSフィード
ブログ内検索
フリーエリア

カテゴリー
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。