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 ファイルで構成されている。これらをプロジェクトに追加してやれば良い。
- Releases から OpenCV 3.4.1 の Win Pack をダウンロードして適当なディレクトリに解凍する。
build/java/opencv-341.jar
をプロジェクトのライブラリに追加する。sbt であればプロジェクトディレクトリのlib_managed
へコピーする。build/java/x64/opencv_java341.dll
をPATH
の通ったディレクトリにコピーする。
動作確認
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 なコンストラクタが用意されていなくて使えないものが多い。