C#

納得いかないこと

最近プログラムを書いていてちょっと納得いかなかったことをいくつか。

FindContoursを実装

CvSeqを使う関数は何かとラッパー的に面倒なので避け気味なのですが、頑張って実装しました。最近たまっていた分を含めてリリースしておきました。Sandcastleのバージョンを上げたので、以前よりもヘルプが見やすくなっていると思います。 以下の画像はOpenC…

アンマネージ関数の動的呼び出し

C#でアンマネージな関数を使いたければ、DllImportを使うのが常道です。しかし、定義の際に必ずstaticをつけることからもわかるように、静的な定義であり、プログラムの実行中に動的に関数名を決めてロード、といったことはできません。C/C++ではWin32APIのL…

動的配列

C C# C++

だいぶ前に書いたちょっとしたメモのせいで、このブログに「C/C++/C# 動的配列」といったキーワードで飛んでくる方が結構いるみたいです。大して書いてなくて申し訳ないので勉強兼ねてまとめときます。

ステレオマッチング (cvaux)

cvFindStereoCorrespondenceBM, cvFindStereoCorrespondenceGCのほかに、cvauxの方にもcvFindStereoCorrespondenceという関数があります。こちらもラップしてみました。 http://opencv.jp/opencv-1.1.0/document/opencvref_cvaux.html#decl_cvFindStereoCorr…

エピポーラ幾何、ステレオマッチングの実装

こちらのページの関数をすべてラップしました。まだリリースはしてません。 http://opencv.jp/opencv-1.1.0/document/opencvref_cv_epipolar.html cvFindStereoCorrespondenceBMとcvFindStereoCorrespondenceGCを試しに動かしてみました。先ほどのOpenCVリフ…

C++/CLIでの定数の定義

クラスのメンバに定数を、すなわちpublicでstaticでconstな値を定義するとします。C++的な考えでC++/CLIで定義してみるとこうなるでしょう。 public ref class Const abstract sealed { public: static const Int32 HOGE = 123; }; しかしこれをC#側から定義…

文字の全ての組み合わせの列挙

例えばパスワードに総当たり攻撃をかけるときには、文字のあらゆる組み合わせからなるパスワードを作ってみて攻撃することになります。どういうアルゴリズムで作れるのか興味を持ったので書いてみました。 こんなクラスを定義しておきます。いまいちスマート…

.NET Frameworkの例外一覧

例外を投げたいとき、「この場合だとどの例外を投げるのが適切なんだろう?」と悩むことが良くあります。すぐ出てくるのはArgumentException, ArgumentNullException, FileNotFoundExceptionぐらいで、他はパッと出てこないのでただのExceptionを投げて誤魔…

Task Parallel Library (TPL) を使う

C#

TPLとは C#などの.NET Framework上の言語で並列処理を行うライブラリです。最近のCPUはほぼすべてマルチコアな訳で、それなのにシングルスレッドでプログラムを書いてCPU1個しか働いてないのはもったいない、全部働かせよう、というわけです。自分でThreadな…

x64環境でのOpenCvSharp

最近研究室のPCが64bit版のWindows Vistaになったのですが、それからというものOpenCvSharpを呼び出している研究のプログラムがBadImageFormatExceptionを吐いて全く動かなくなってしまいました。 あれ?.NETってそういう環境の違いうまく吸収してくれるんじ…

参照渡しの罠

ラッパーを書いていると当然のようにポインタが山のように出てきます。中でもcvCreateTrackbarは鬼門の一つです。定義は次のようになっています。 CV_EXTERN_C_FUNCPTR( void (*CvTrackbarCallback)(int pos) ); int cvCreateTrackbar( const char* trackbar…

unsafe

C#

MMLばっかりなのでたまには他の事を。C#でこんなこんなコードが通るんだなあと、ちょっとしみじみ思ったりしている今日この頃。 for(int i=0; i<10; i++) unsafe{ } まあ、こんな書き方はやめた方がよさそうですが、自分はunsafeなコードが使いたくなった場…