#contents *BB1からBB2への移行方法まとめ1 1.基本手順 (1)BB2の基本動作プログラム(カメラから画像を取って表示するヤツ)からひたすらコードを投入。この段階では基本的にコードを消さない。 (2)BB2から得られるもの確認。今回は triclopsContext , triclopsInput , triclopsImage , IplImage(Color , Rect , Edge , Disp) (3)BB1上のプログラムと対応するものとの違い確認→変換 (4)triclops関係は変換不可能なので直接書き換え(距離取得部分とか) 2.躓いた所 (1)IplImageの〔チャンネル、ビットデプス、サイズ〕の確認を怠りcvGetMatでエラーを連発&混乱に陥る。以下のエラーメッセージがよく出た。 --------------------------- OpenCV GUI Error Handler --------------------------- Null pointer (The image has NULL data pointer) in function cvGetMat, C:\User\VP\opencv\cxcore\src\cxarray.cpp(2794) Press "Abort" to terminate application. Press "Retry" to debug (if the app is running under debugger). Press "Ignore" to continue (this is not safe). --------------------------- 中止(A) 再試行(R) 無視(I) --------------------------- (2)画像変換の知識不足(チャンネル数変更、Header⇔Image変更) (3)距離検出はtriclopsImageを使用していることに途中まで気付かなかった(triclopsContextなどの変更が遅れた) *ハンドルされていない例外4 1.ErrorMessage ~~~.exe の 0x7c94fe40 でハンドルされていない例外が発生しました: 0xC0000005: 場所 0x00000100 を読み込み中にアクセス違反が発生しました。 2.原因 コードミス。 3.解決策 以下のように変更した。 wsprintf( s, TEXT( "KeyCode = %0x, Ctrl = %s, Shift = %s, Caps = %s", wParam, ctrl, shift, caps)); ↓ wsprintf( s, TEXT( "KeyCode = %0x, Ctrl = %s, Shift = %s, Caps = %s"), wParam, ctrl, shift, caps); 4.考察 +ハンドルされていない例外→使用している関数に与える引数の失敗。値のミスではなく、引数部分の形が間違っている場合が多い? +「0x7c94fe40」や「0xC0000005: 場所 0x00000100」などに深い意味はない。文字通り場所を表しているのみ。 +デバッガで指定された部分のコードをよく読んだ方が解決の近道になる?