【Java】 OpenCV ~ 入門編 ~

OpenCV とは?

 * Open Source Computer Vision Library
 * BSDライセンス(商用利用可能)
 * 画像・動画を処理するのに必要な様々な機能を提供

主な機能

 * フィルター処理
 * オブジェクト追跡(Object Tracking)
 * 領域分割(Segmentation)
 * カメラキャリブレーション(Calibration)
 * 特徴点抽出
 * 物体認識(Object recognition)
 * 機械学習(Machine learning)
 * パノラマ合成(Stitching)
 * コンピュテーショナルフォトグラフィ(Computational Photography)
 * GUI(ウィンドウ表示、画像ファイル、動画ファイルの入出力、カメラキャプチャ)

 サポートOS

 * Windows
 * Linux
 * Mac OS
 * iOS
 * Android

サポート言語

 * C(ただし、3.0からメンテナンス対象外)
 * C++
 * Python
 * Java
 * C#

公式サイト
http://opencv.org/
Download
http://opencv.org/downloads.html

■ 設定

環境

 * OS : Windows10
 * Eclipse : Mars.2 Release (4.5.2)
 * OpenCV : Version3.1.0

 ※ OpenCV v2.4系でも同じ

手順

[1] 以下のURLから、OpenCV(今回は「opencv-3.1.0.exe」)をダウンロードする

http://opencv.org/downloads.html

[2] ダウンロードしたファイル「opencv-3.1.0.exe」をダブルクリックし、
    任意の場所(今回は「C:\work\」)を指定する

[3] 環境変数 Path にOpenCVのdllファイルの
 パス(「今回はC:\work\opencv\build\java\x64」)を指定する

[4] Eclipseを立ち上げて、
 JARファイル(「今回はC:\work\opencv\build\java\opencv-310.jar」)をImportする

補足

 * サンプルなどの実行時に、UnsatisfiedLinkErrorが発生した場合は、
   以下の関連記事を参照のこと。

https://dk521123.hatenablog.com/entry/2016/09/29/004036

■ サンプル

使用する画像
http://www.cs.cmu.edu/~chuck/lennapg/playboy_backups/lena_lg.jpg

例1:グレースケール変換(Hello World的に)

OpenCV v3.1系

import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;

public class HelloWorld {

  public static void main(String[] args) {
    System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
    
    String input = "C:/temp/lena_lg.jpg";
    String output = "C:/temp/result.jpg";
    Mat matrixSrc = new Mat();
    Mat matrixDst = new Mat();

    // 入力画像の読み込み
    matrixSrc = Imgcodecs.imread(input);
    // カラー画像をグレー画像に変換
    Imgproc.cvtColor(matrixSrc, matrixDst, Imgproc.COLOR_BGR2GRAY);
    Imgcodecs.imwrite(output, matrixDst);
    
    System.out.println("Done!");
  }
}

OpenCV v2.4系

import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.highgui.Highgui;
import org.opencv.imgproc.Imgproc;

public class HelloWorld {

  public static void main(String[] args) {
    System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
    
    String input = "C:/temp/lena_lg.jpg";
    String output = "C:/temp/result.jpg";
    Mat matrixSrc = new Mat();
    Mat matrixDst = new Mat();

    // 入力画像の読み込み
    matrixSrc = Highgui.imread(input);
    // カラー画像をグレー画像に変換
    Imgproc.cvtColor(matrixSrc, matrixDst, Imgproc.COLOR_BGR2GRAY);
    Highgui.imwrite(output, matrixDst);
    
    System.out.println("Done!");
  }
}

参考文献

OpenCV入門【3.0対応】
http://www.buildinsider.net/small/opencv/001
OpenCVで学ぶ画像認識
http://gihyo.jp/dev/feature/01/opencv
JavaOpenCV入門
http://opencv.blog.jp/java/%E4%BD%BF%E3%81%84%E6%96%B9
EclipseJava用のOpenCVを使う(for windows)
http://qiita.com/livlea/items/a853c374d6d91b33f5fe
OpenCV 3.1 eclipse
http://pg-fan.com/?p=549
 

関連記事

Java

OpenCV ~ 基本編 / 画像編集 ~
https://dk521123.hatenablog.com/entry/2016/09/28/231829
JavaOpenCV ~ 基本編 / 顔検出 ~
https://dk521123.hatenablog.com/entry/2016/06/28/000927
OpenCVトラブルシューティング
https://dk521123.hatenablog.com/entry/2016/09/29/004036

C

C#OpenCV を使用する ~ 環境構築編 ~
https://dk521123.hatenablog.com/entry/2019/05/07/232536
C#OpenCV を使用する ~ 画像の位置合わせを考える ~
https://dk521123.hatenablog.com/entry/2019/05/08/004047

Python

OpenCV ~ 画像認識 ~
https://dk521123.hatenablog.com/entry/2020/10/06/233343