Android StudioにOpen CVを入れる





## プロジェクトの作成
https://qiita.com/tifa2chan/items/a2ec4f5d90eeb9cf1802


上記のサイトに沿って、プロジェクトを作成し、Open CVをインポートする。
今回のプロジェクト名はOpenCVTestとする。
ビルドすると、以下のエラーが発生。

```
Fix Android build error: Plugin with id 'kotlin-android' not found.
```

これは、Kotlin-androidがないために生じるエラー。以下に沿って、修正。

https://sebhastian.com/plugin-with-id-kotlin-android-not-found/

OpenCVTest2/build.gradleを以下のように編集。
今回はGradle versionが5.1.1なので、Kotlin_versionは、1.3.11とする。

![スクリーンショット 2023-08-04 15.48.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/689410/4f0bc501-7148-9e98-f704-abfa6b7415e4.png)


https://docs.gradle.org/current/userguide/compatibility.html

```.gradle:OpenCVTest2/build.gradle
buildscript {
    # ext.kotlin_version = '1.6.21'
    ext.kotlin_version = '1.3.11'    # add
    repositories {
        google()
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:4.0.1'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" # add
    }
}

allprojects {
    repositories {
        google()
        jcenter()
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}
```



## ERROR: A problem occurred configuring project ':opencv'.


```
ERROR: A problem occurred configuring project ':opencv'.
```

opencvのバージョンを4.8.0から3.4.4に変更。project structureから、以前のopencvを削除し、settings.gradleからも以前のopencvのincludeを削除する。

https://github.com/opencv/opencv/releases/3.4.4


![スクリーンショット 2023-08-04 16.14.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/689410/7bdbadad-8d06-1ee0-da72-fbbd8591acd9.png)


project structureの`All modules`と、`app`に、opencvが含まれているか確認する。



![スクリーンショット 2023-08-04 16.10.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/689410/27f064e8-5839-a60e-8777-d034db0b9e71.png)



ビルドすると以下のエラーが発生した。

```
ERROR: The minSdk version should not be declared in the android manifest file. You can move the version from the manifest to the defaultConfig in the build.gradle file.
Remove minSdkVersion and sync project
Affected Modules: opencv3.4.4

```


そこで、opencv3.4.4/java/AndroidManifest.xmlの以下をコメントアウト。

```
<!--<uses-sdk android:minSdkVersion="8" android:targetSdkVersion="21" />-->
```



![スクリーンショット 2023-08-04 16.11.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/689410/dd4d66a9-64f4-c2b1-2cc2-34838af32347.png)


## no opencv_java in java.library.path

参考記事

https://sebhastian.com/android-studio-libs-folder/

https://teratail.com/questions/134772?link=qa_related_pc

https://teratail.com/questions/145836

以下のプログラムを実行。
`opencvtest2.java`, `sample.png`は、`app/src/main/java/com/opencvtest2`以下に配置している。

```java:opencvtest2.java
package com.opencvtest2;  // ★適宜自分のパッケージ名に変更
import android.support.v7.app.AppCompatActivity;

import android.os.Bundle;
import android.widget.TextView;

import org.opencv.android.OpenCVLoader;
import org.opencv.core.Mat;
import org.opencv.core.Core;
import org.opencv.core.Size;
import org.opencv.imgcodecs.Imgcodecs;
//import org.opencv.core.opencv_imgcodecs.*;

public class opencvtest2 {

    public static void main(String[] args) {
        // 正しく読み込まれない場合は、絶対パスに変更する
        String imageFilePath = "sample.png";
        //Loading the OpenCV core library
        System.loadLibrary( Core.NATIVE_LIBRARY_NAME );

        // 画像を読み込む
        Imgcodecs imageCodecs = new Imgcodecs();
        Mat image = imageCodecs.imread(imageFilePath);

        // 画像の幅と高さを取得
        int width = image.cols();
        int height = image.rows();
        Size size = image.size();
        System.out.println("Width: " + width + ", Height: " + height);
        System.out.println("size: " + size);
    }
}

```

すると、以下のエラーが発生。

```
Exception in thread "main" java.lang.UnsatisfiedLinkError: no opencv_java3 in java.library.path
```

これは、`app/libs`に、opencvのdllファイルが無いために発生した模様。
そこで、opencv 3.4.4のWindows用exeファイルを下記からダウンロードし、
`opencv/build/java/x64/opencv_java344.dll`をandroid studioで開いているプロジェクトの`OpenCVTest2/app/libs`に移動する。

これで、ビルドし、実行するとうまくいった。
もし、これでうまく行かない場合は、`System.load("opencv_java344.dllまでの絶対パス")`を使用するとよい。
例えば、以下のように使用する。

```java:opencvtest2.java
    public static void main(String[] args) {
        String imageFilePath = "sample.png";
        //Loading the OpenCV core library
        // System.loadLibrary( Core.NATIVE_LIBRARY_NAME );

        //絶対パスは適宜変更すること
        System.load("C:\Users\hoge\OpenCVTest2\app\libs\opencv_java344.dll");

```