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);

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

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

2009年10月23日金曜日

Digiclopsその6

ノートPCにIEEEのカードを挿して(電源もそのカードに挿す)、Digiclopsプログラムを実行。
お、無事カメラ画像が出力された。WindowsXPでは実証済みだったが、Vistaでも問題なく動いた。
これは多分7(セブン)でもいけそう。ただ、カードに電源を供給しないと動かない。バスパワーでは難しいんですね。

2009年10月22日木曜日

ボヤキその5

システムわからん奴に限って、ちょっとでも動かなくなったら文句を言う。
そういう輩は基本的に、自分の無知を隠したいために、他の人に責任転嫁したがる傾向にある。
そういう輩は無視無視。何か反論すると更に文句言うし、たとえ直ったとしても「今度からこのようなことがないように」と自分で直したかのように言うし、直らなかったら「こんなシステムを入れたから悪い」とこっちの責任にするし・・・。

無視ってたら、そのうち他の人に攻撃の矛先を変えるでしょう。他の人ごめんなさい。

システムを熟知している人は穏やかな人が多い。また自分を攻撃しても人は攻撃しない。ま、でもこういう人が同じ組織にいるから組織が活発化するんでしょう。みんな大人しかったら波風立たないけど発展もなさそうですからね。

2009年6月23日火曜日

Digiclopsその5

REX-CFW3のIEEE1394カードを購入。バスパワーなのでDigiclopsカメラに電源が供給できるかと、1mm程度の期待をして、ノートパソコンに装着してみたが、やはり期待通りには行かなかった。・・・が、もちろんこうなることは想定内で、このカードには電源が挿せるので、この電源を購入し再度チャレンジを試みる。バスパワーで淡い期待をしていたのでまだ購入しておらず本日ネットで購入。

IOデータのカードの電源はどこもかしこも(リアルショップもネットショップも)販売していないため諦めました。最新のものを購入するのは楽だが、古いものを購入するのは難しい・・・

2009年6月22日月曜日

ボヤキその4

出張から帰ってきました。ノートパソコンでDigiclopsを使うために、IEEE1394カードを購入。
使えるかどうかは良くわかりません。明日チェックです。っというのも出張後の事務処理、メールチェックで何もできないから・・・ああ、、、秘書欲しい。

2009年6月18日木曜日

OpenCVその7

これまで動かなかったサンプルのキャリブレーションコードがやっと動いた。チェスボードの数の設定が違っていたので動かなかったらしい。人のプログラムの解析は難しいです。

とりあえずこれでキャリブレーションプログラムが自作できるメドがつきました。・・・が明日から出張。数日開発は停滞です。