OpenCV: セットアップ

Takami Torao OpenCV 3 #OpenCV
  • このエントリーをはてなブックマークに追加

Python 3

Python 環境の OpenCV は pip を使って簡単にインストールできる。

$ pip install opencv-python
...
Installing collected packages: numpy, opencv-python
Successfully installed numpy-1.14.3 opencv-python-3.4.1.15

$ python
>>> import cv2
>>> print(cv2.__version__)
3.4.1
>>> exit()

Python で画像を表す行列は numpy の ndarray を使用している。

Java / Scala

Windows / Java 環境で OpenCV を使うまでのセットアップ手順。OpenCV の Java バインディングは JAR ファイルとその JNI のネイティブライブラリ (Windows であれば DLL) の 2 ファイルで構成されている。これらをプロジェクトに追加してやれば良い。

  1. Releases から OpenCV 3.4.1 の Win Pack をダウンロードして適当なディレクトリに解凍する。
  2. build/java/opencv-341.jar をプロジェクトのライブラリに追加する。sbt であればプロジェクトディレクトリの lib_managed へコピーする。
  3. build/java/x64/opencv_java341.dllPATH の通ったディレクトリにコピーする。

動作確認

import org.opencv.core.{Core, CvType, Mat}

object Main extends App {
  System.loadLibrary(Core.NATIVE_LIBRARY_NAME)
  val mat = Mat.eye(3, 3, CvType.CV_8UC1)
  println(s"mat = ${mat.dump()}")
  mat.release()
}

ネイティブライブラリをロードすれば Java から OpenCV の API が利用できる。実行結果:

mat = [  1,   0,   0;
   0,   1,   0;
   0,   0,   1]

C++/Python で用意されている殆どの関数/定数は Imgproc.* に定義されている。

OpenCV で最もよく使う、行列を表すクラス Mat使い終わったら明示的に release() を実行すべきである。クラスのファイナライザに開放処理が挿入されているが、画像を保持する巨大なベクトルデータは JavaVM 管理外のオフヒープに確保されるため OS のメモリを食いつぶすまで溢れても GC の対象にならないことが多い。

OpenCV は Java をサポートしていることになっているが、そのソースは自動生成されているように見える。features2d など、アルゴリズム系クラスの多くにソース生成に失敗して public なコンストラクタが用意されていなくて使えないものが多い。