SharperCVでSnakeImageを使う
Tue.04.12.2007 Posted in コンピュータ
 SharperCVOpenCVをC#で使うためのラッパーだ。SnakeImageを使おうとしたのだが、輪郭をうまくとることができない。なぜうまくとることができないかというと、第2引数の『CvPoint[] points』が値渡しになっているのが原因のようだ。.Net Frameworkのマネージコードからアンマネージコードへ配列を渡すとデフォルトで値渡しになる。しかし、cvSnakeImageの第2引数は参照渡しである必要がある。これが原因でうまく輪郭が取れなかったようだ。参照渡しにする方法はSharperCVのソースコード『cvHistogram.cs』の

[DllImport(DLL.CV)]
private static extern void cvSnakeImage( IntPtr image, CvPoint[] points, int length,
                                                float[] alpha, float[] beta, float[] gamma, int coeffUsage,
                                                CvSize win, CvTermCriteria criteria, int calcGradient);

の第2引数に[In, Out]を付け

[DllImport(DLL.CV)]
private static extern void cvSnakeImage( IntPtr image, [In, Out] CvPoint[] points, int length,
                                                float[] alpha, float[] beta, float[] gamma, int coeffUsage,
                                                CvSize win, CvTermCriteria criteria, int calcGradient);

とすれば良い。

 後、SharperCVのソースコード『cvTypes.cs』の_CvSeq構造体の『public CvMemStorage* storage;』でコンパイルエラーが出る(ソースコードそのままなのになぜ?)。原因がわからなかったので、ひとまず『CvMemStorage*』を『IntPtr』で代用した。

 私は初心者なのでこれは間違っているかもしれない。別の方法があったら教えてください。


参考
opencv.jp
SharperCV Project
さまざまな型の配列のマーシャリング
方向属性

Tag: プログラミング 画像処理

関連エントリー


« 『SAPPORO Draft One スパークリングアロマ』を飲んだ。 | Home | 『酒育のススメ』を読んだ »

comments

コメントの投稿


管理者にだけ表示を許可する

trackback


この記事にトラックバックする(FC2ブログユーザー)

topBack to TOP