opencv_导入AndroidStudio

文章目录

  • Java API导入
    • 开发环境
    • 导入opencv
    • 问题解疑
  • C/C++API导入

Java API导入

开发环境

  • opencv_4.2.0
  • ndk21项目工程(高版本会出现依赖库找不到)

导入opencv

导入java源码

需要注意是java文件夹下的文件,但项目需要so库才能运行,所以java文件夹下不包含so库,后面导入
opencv_导入AndroidStudio_第1张图片

修改导入的源码

  • apply plugin: 'com.android.application'改为apply plugin: 'com.android.library',表明导入的源码作为library module存在
  • 去掉applicationId "org.opencv"
    opencv_导入AndroidStudio_第2张图片

添加so库

so库在源码包的路径如下
opencv_导入AndroidStudio_第3张图片
既然是opencv的so库,那就在导入的module中创建jniLibs,将so库添加进去
opencv_导入AndroidStudio_第4张图片
最后就把调整好的module添加到app项目中

初始化opencv库

初始化opencv,查看日志输出

package com.aib.opencv.demo

import android.os.Bundle
import android.util.Log
import androidx.appcompat.app.AppCompatActivity
import org.opencv.android.BaseLoaderCallback
import org.opencv.android.LoaderCallbackInterface
import org.opencv.android.OpenCVLoader


class MainActivity : AppCompatActivity() {
    private val TAG = "MainActivity"

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
    }

    private val mLoaderCallback: BaseLoaderCallback = object : BaseLoaderCallback(this) {
        override fun onManagerConnected(status: Int) {
            when (status) {
                LoaderCallbackInterface.SUCCESS -> {
                    Log.i(TAG, "OpenCV loaded successfully")
                }
                else -> {
                    super.onManagerConnected(status)
                }
            }
        }
    }

    /**
     * 初始化opencv库
     */
    override fun onResume() {
        super.onResume()
        if (!OpenCVLoader.initDebug()) {
            Log.d(TAG, "Internal OpenCV library not found. Using OpenCV Manager for initialization")
            OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION, this, mLoaderCallback)
        } else {
            Log.d(TAG, "OpenCV library found inside package. Using it!")
            mLoaderCallback.onManagerConnected(LoaderCallbackInterface.SUCCESS)
        }
    }
}

查看日志输出如下,即为接入成功

OpenCV loaded successfully

问题解疑

NDK版本导致的问题

opencv_导入AndroidStudio_第5张图片
其实打开apk包,可以看到opencv的so库是已经打包进去,但为什么还是报这个错误,其它博客解释为:基本都是apk打包时,未将so库进行打包,可分析apk包时,其实有so库,那问题导致原因如下图,由于NDK版本太高,一些依赖找不到

opencv_导入AndroidStudio_第6张图片
在gradle添加arguments "-DANDROID_STL=c++_shared"解决上面问题
opencv_导入AndroidStudio_第7张图片

C/C++API导入

待续

你可能感兴趣的:(opencv)