Thursday, October 27, 2016 / Ubuntu, OpenCV

open-cv java binding を Ubuntu 16.04 で試す

OpenCV Javaイントロダクション に記載ある以下のコードを Ubuntu 16.04 でビルド&実行する話。

Main.java

import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.core.CvType;
import org.opencv.core.Scalar;

class SimpleSample {

  static{ System.loadLibrary(Core.NATIVE_LIBRARY_NAME); }

  public static void main(String[] args) {
    System.out.println("Welcome to OpenCV " + Core.VERSION);
    Mat m = new Mat(5, 10, CvType.CV_8UC1, new Scalar(0));
    System.out.println("OpenCV Mat: " + m);
    Mat mr1 = m.row(1);
    mr1.setTo(new Scalar(1));
    Mat mc5 = m.col(5);
    mc5.setTo(new Scalar(5));
    System.out.println("OpenCV Mat data:\n" + m.dump());
  }
}

依存ライブラリのインストール

sudo apt-get install libopencv2.4-java

※必要なら openjdk-8-jdk-headless などもインストールしておきます。

これで /usr/share/java/opencv.jar (実体は /usr/share/OpenCV/java/opencv-249.jar )が入ります。 その他 /usr/lib/ 以下に libopencv_ほにゃらら.so系 がインストールされるので、/usr 以下で find するなどして状況を把握しておきましょう。

Main.java のビルド

OpenCV Javaイントロダクション ページでは、Ant でビルドする方法が書かれていますが、とりあえず、ここではコマンドラインで一番簡単にビルドする方法を探ります。

結論としては /usr/share/java/opencv.jar にクラスパスを通すだけでビルド&実行できました。

$ ls
Main.java
$ export CLASSPATH=.:/usr/share/java/opencv.jar;javac Main.java
$ export CLASSPATH=.:/usr/share/java/opencv.jar;java Main
Welcome to OpenCV 2.4.9.1
OpenCV Mat: Mat [ 5*10*CV_8UC1, isCont=true, isSubmat=false, nativeObj=0x7fee7c222a10, dataAddr=0x7fee7c222980 ]
OpenCV Mat data:
[0, 0, 0, 0, 0, 5, 0, 0, 0, 0;
  1, 1, 1, 1, 1, 5, 1, 1, 1, 1;
  0, 0, 0, 0, 0, 5, 0, 0, 0, 0;
  0, 0, 0, 0, 0, 5, 0, 0, 0, 0;
  0, 0, 0, 0, 0, 5, 0, 0, 0, 0]

これを makefile にまとめておきます。

run : Main.class
    @export CLASSPATH=.:/usr/share/java/opencv.jar;java Main

Main.class : Main.java
    @export CLASSPATH=.:/usr/share/java/opencv.jar;javac $<

clean :
    @rm -f *.class

以上です。