OpenCvSharp x64版を公開

64bit版を公開しました。ずいぶんファイルが増えました。なおOpenCV1.1pre向けはそもそも1.1preがあまり64bitに対応していなさそうなので見送っています。(2.0も、まだまだという面はあります。)

http://code.google.com/p/opencvsharp/downloads/list


去年から研究室では64bitOSを使い始め、家でも先日Windows7にするついでに64bitにしてしまいました。ときどき面倒事もあるもののドライバや既存ソフトウェアの互換性に悩まされることもほとんどなく、またやはり研究目的ではもはや32bitに戻るのは考えられないと感じております。

例えば以下は1枚約1MBの画像を2.5K個、すなわち2.5GBぐらいのメモリを食うコードです。

IplImage[] images = new IplImage[1024 * 2 + 512];
for (int i = 0; i < images.Length; i++)
{
    images[i] = new IplImage(1024, 1024, BitDepth.U8, 1);
    images[i].Zero();
}

32bitでは1プロセスで使えるメモリは2GBまでらしいので、メモリが確保できず落ちます。

これが64bitなら問題なく確保できました。

これまでは途中計算の結果をファイルに書き出さざるを得ませんでしたが、これならオンメモリのまま処理が行えそうです。高速化が期待できます。また、今研究で扱っている処理でBitDepthが32ビット浮動小数点の画像を扱っていて、そもそもファイルに書き出しにくいという個人的な事情もあります。



64bit版のOpenCvSharpを利用するためには、当然64bit向けにビルドしたOpenCVのDLLが必要となります。cmakeで「Visual Studio 9 2008 Win64」といった64bit向けの設定でビルドファイルを作り、ビルドします。そして利用側では、プラットフォーム設定を「x64」にします。「Any CPU」でも動作するかもしれませんが、設定しておいた方が確実です。

もしBadImageFormatExceptionが出たら、どこかプラットフォームの設定が食い違っているということなので、見直しましょう。たまに、すべて合っているはずなのに直らず、再度DLLを置きなおしてみたら直るということがあります。詰まったら試してください。


Win32/64 APIシステムプログラミング―32/64ビットの共存

Win32/64 APIシステムプログラミング―32/64ビットの共存