3年ぶりの「OpenCvSharpをつかう」シリーズ再開です!
OpenCvSharpをLinuxで動かすことについては、大昔に断片的に書きましたが、最後まで通しで書いてみます。記憶を頼りに書いているので、本当は詰まった箇所が抜けているかもしれません。
OpenCV / OpenCvSharpのバージョンは2.4.5とします。
OpenCVのインストール
aptはちょっと古いのでソースから入れます。ソース取得。
wget http://sourceforge.net/projects/opencvlibrary/files/opencv-unix/2.4.5/opencv-2.4.5.tar.gz tar xvzf opencv-2.4.5.tar.gz cd opencv-2.4.5
OpenCVは最低限の構成で行きますが、これくらいは入れないとダメでした。
sudo apt-get update sudo apt-get install build-essential libgtk2.0-dev pkg-config cmake
あとは普通にcmakeとmake。
cmake .
make
sudo make install
私の環境では、 /usr/local/lib 以下に、OpenCVの共有ライブラリ libopencv_*.so が置かれました。ここはよく把握しておきます。
OpenCvSharp の導入
大げさに導入と言いましたが、取ってくるだけです。
wget opencvsharp.googlecode.com/files/OpenCvSharp-2.4.5-x86-20131009.zip unzip OpenCvSharp-2.4.5-x86-20131009.zip cd OpenCvSharp-2.4.5-x86-20131009
OpenCvSharp.dll.config を編集します。ここには、opencv_core245.dll といったWindowsでのDLL名と、libopencv_core.so といったLinuxでの共有ライブラリの対応付けをしています。OpenCvSharpは、デフォルトではWindowsの名前で読みに行きますが、この.configさえあればLinuxでもそのまま動く寸法です。
Linuxなら以下のまま基本的に変えなくても良いはずですが、環境に合わせ適宜設定してください。(Macなら .dylibに変えるなど必要かもしれません。)
<?xml version="1.0" encoding="utf-8" ?> <configuration> <dllmap os="!windows" dll="opencv_calib3d245" target="libopencv_calib3d.so" /> <dllmap os="!windows" dll="opencv_contrib245" target="libopencv_contrib.so" /> <dllmap os="!windows" dll="opencv_core245" target="libopencv_core.so" /> <dllmap os="!windows" dll="opencv_features2d245" target="libopencv_features2d.so" /> <dllmap os="!windows" dll="opencv_flann245" target="libopencv_flann.so" /> <dllmap os="!windows" dll="opencv_highgui245" target="libopencv_highgui.so" /> <dllmap os="!windows" dll="opencv_imgproc245" target="libopencv_imgproc.so" /> <dllmap os="!windows" dll="opencv_legacy245" target="libopencv_legacy.so" /> <dllmap os="!windows" dll="opencv_objdetect245" target="libopencv_objdetect.so" /> <dllmap os="!windows" dll="opencv_video245" target="libopencv_video.so" /> </configuration>
C#プログラムのビルド・実行
Monoの導入。これはaptで充分でしょう。
sudo apt-get install mono-devel mono-mcs
C#プログラムを書いていきます(test.cs)。参照設定の容易のため、OpenCvSharpをunzipしたディレクトリの中に書くことにします。
using OpenCvSharp; class Program { static void Main() { IplImage img = new IplImage("hoge.png"); CvWindow.ShowImages(img); img.Dispose(); } }
ビルドします。
mcs test.cs -r:OpenCvSharp.dll
最後に実行。OpenCVのビルド時に--prefix=で変な場所に置くなどしていなければ、これだけで実行できるはずです。
mono test.exe