0
1

More than 3 years have passed since last update.

Android で OpenCV のサンプルを試す

Last updated at Posted at 2019-12-14

AndroidStudio で OpenCV をインポートする
の続きです。

概要

Android 用 OpenCV には、
8個のサンプルが同封されている。
これを試す。

  • tutorial-1-camerapreview
    • tutorial-2-mixedprocessing
  • tutorial-3-cameracontrol
  • image-manipulations
  • 15-puzzle
  • color-blob-detection
  • camera-calibration
    • face-detection

OpenCV4Android Samples

tutorial-1-camerapreview

カメラのプレビュー画像を表示する。
opencv42_preview.png

基本となるサンプルなので、別の記事で解説する。

Android で OpenCV のサンプル camerapreview を試す

tutorial-2-mixedprocessing

OpenCVの Java API と Native API の2つの方法で、
カメラからの画像を変換して、表示する。

特徴点抽出の例
opencv48_find._feature.png

Native API を使うサンプルなので、別の記事で解説する。

Android で OpenCV のサンプル mixedprocessing を試す

tutorial-3-cameracontrol

OpenCV の Java API を使って、
Androidアプリでカメラを操作する方法を示す。

sepia の例
opencv43_sepia.png

下記の機能がある。
- カメラの Color Effect を有効にする。
- カメラのプレビュー解像度を変更する。
- カメラ画像をキャプチャしてファイルに保存する。

カメラの Color Effect には、下記の選択肢がある。
- none
- mono
- negative
- solarize
- sepia
- posterize
- whiteboard
- blackboard
- aqua

注意:
これらの機能は API 21以降で、廃止予定 (Deprecated) になった旧来の Camera API により実現される。

reference : setColorEffect

サンプルコードはこちら
https://github.com/ohwada/Android_Samples/tree/master/Opencv43

Camera2 API を使って同様の機能を実現する方法は、
下記の記事を参照ください。

Android の Camera2 API を使って Color Effect する

image-manipulations

複数のフィルターをサポートし、色空間の変換とヒストグラムの操作を示す。

ヒストグラムの例
opencv45_histgram.png

下記の選択肢がある
- Preview RGBA
- Histograms
- Canny
キャニー ( Canny) 法によりエッジを検出して描画する
- Sobel

ソーベル ( Sobel) 法によりエッジを検出して描画する
- Sepia
- Zoom
- Pixelize
モザイク処理
- Posterize
階調変更

サンプルコードはこちら
https://github.com/ohwada/Android_Samples/tree/master/Opencv45

15-puzzle

カメラ画像を分割して、15パズルにする。
opencv44_15puzzle.png

メニューは下記の2つ
- Show/hide tile numbers
- Start new game

画像の分割には、Mat#submat を使用する。
タイル画像の中央に赤い文字でタイル番号。
タイル画像の境に緑の線

サンプルコードはこちら
https://github.com/ohwada/Android_Samples/tree/master/Opencv44

color-blob-detection

Blobは、いくつかの共通のプロパティ(グレースケール値など)を共有する画素の集合です

このサンプルは、タッチされた場所の色と同じ色の領域を検出し、
領域に輪郭を描画する。

opencv46_blob.png

InRange で、同じ色の領域を検出する
findContours で、輪郭を検出する
drawContours で、輪郭を描画する

サンプルコードはこちら
https://github.com/ohwada/Android_Samples/tree/master/Opencv46

 camera-calibration

カメラの歪みを較正する

グリッドパターンを検出した例
opencv47_calibration.png

このサンプルは、下記を基にしている。
Camera calibration With OpenCV

使い方

OpenCV非対称円グリッドパターン11x4 を使用する。
https://github.com/opencv/opencv/blob/3.4/doc/acircles_pattern.png

グリッドパターンを検出すると、ハイライト表示される。

グリッドパターンを様々な距離、角度から画面をタッチして、キャプチャーする。

メニューバーの「calibrate」ボタンを押す。
結果として、5つの歪み係数が得られる。

プレビューモードは3通りある。

  • Calibration グリッドパターンを検出してハイライト表示する
  • Undistortion 歪みを較正した画像を表示する
  • Comparison 元の画像と歪みを較正した画像を並べて表示する

opencv : cv::calibrateCamera

サンプルコードはこちら
https://github.com/ohwada/Android_Samples/tree/master/Opencv47

 face-detection

顔検出機能の最もシンプルなサンプルです。
opencv49_face_detect.png

別の記事で解説する。
https://qiita.com/ohwada/items/d4cae2924aabe18cc9c4

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1