OpenCvSharpをつかう その14(Debian wheezyで動かす)

3年ぶりの「OpenCvSharpをつかう」シリーズ再開です!
OpenCvSharpをLinuxで動かすことについては、大昔に断片的に書きましたが、最後まで通しで書いてみます。記憶を頼りに書いているので、本当は詰まった箇所が抜けているかもしれません。
OpenCV / OpenCvSharpのバージョンは2.4.5とします。

OpenCvSharpをつかう 記事一覧

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

f:id:Schima:20131010214141p:plain

まとめ

OpenCvSharp.dll.config が肝ですね。

また、最初からラッパーを動かそうとするのは危ないです。まずはC++/Cで、OpenCV自体が動くことを確認したのちに、取り掛かりましょう。Windowsでこんなことを言おうものなら殴られそうですが、Linuxでわざわざやろうとする方なら楽勝のはず。

今回は感じを出すためにLinux上でC#コードのビルドをしましたが、WindowsVisual Studioで開発し、.exeだけ持ってきてもそのまま動きます。すごいですね。