🌊

Androidによる画像処理OpenCV

に公開
mnistに関する記事はこちら

OpenCV導入

公式サイトからOpenCVライブラリをDL

  1. 公式サイトから最新のOpenCV Android SDKをダウンロード
    現在の最新バージョンは4.11.0(2025年4月15日時点)
  2. 最新バージョン(4.11.0)の「opencv-4.10.0-android-sdk.zip」をダウンロード
  3. ダウンロードしたZIPファイルを解凍

Android StudioにOpenCVをインポート

  1. Android Studioを開き、「Atl+\」キーでメニューを開き「File > New > Import Module」を選択
  2. 「Import Module from Source」画面で、解凍したOpenCVフォルダ内の「sdk」ディレクトリを選択
  3. モジュール名を「opencv」として、「Finish」をクリック

インポートに時間がかかるので待ちます。
(私の環境で5分ぐらい待ちました。AndroidStudioが死んだかと思いました😂)

依存関係などの設定

  1. 「alt+\」キーでメニューを開き「File>Project Structure」を選択

  2. Project Structure画面が開くので、「Dependencies>All Modules>+ボタン>Module Dependency」を選択

  3. app」を選択

  4. opencv」にチェックを入れて「OK」をクリック

  5. opencv」が追加されたのを確認し、「OK」をクリック

  6. Java/Kotlinのバージョン互換性を確保するために、build.gradle(Module:app)に以下の設定を変更

    build.gradle.kts
    android {
     //省略
     compileOptions {
         sourceCompatibility = JavaVersion.VERSION_17
         targetCompatibility = JavaVersion.VERSION_17
     }
     kotlinOptions {
         jvmTarget = "17"
     }
     //省略
    
  7. OpenCVモジュールのbuild.gradleファイルを修正。
    OpenCV SDK側でKotlinを使うことが非推奨のようで、Kotlinを使っていないのに、Kotlin-androidプラグインが適用されてしまうため、Kotlinコンパイラが動きエラーになってしまうっぽいです。
     このあたりの仕組みはよくわかりません><
    try-catchの部分を全部コメントアウト。
    あと、javaのバージョンもAppのgradleに合わせて修正。

    build.gradle(Module
     apply plugin: 'com.android.library'
     apply plugin: 'maven-publish'
     //try {
     //    apply plugin: 'kotlin-android'
     //    println "Configure OpenCV with Kotlin"
     //} catch (Exception e) {
     //    println "Configure OpenCV without Kotlin"
     //}
    
     android {
         //省略
         compileOptions {
             sourceCompatibility JavaVersion.VERSION_17
             targetCompatibility JavaVersion.VERSION_17
         }
         //省略
    
  8. Sync Now!!!!

OpenCVの初期化

MainActivity.ktを開き、緑の部分を追加。

MainActivity
class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
+        if (OpenCVLoader.initLocal()) {
+            Log.d("opencv", "OpenCV loaded successfully")
+        } else {
+            Log.d("opencv", "OpenCV failed to load")
+        }
        //以下省略
    }
}

アプリ実行でログキャット確認

アプリを実行してみます。
ログキャットさんにOpenCVのロードに成功したって表示された🤣

Discussion