Android 应用程序在加载外部库时退出

标签 android opencv opencv4android

我正在尝试将 opencv4 添加到我的 android 应用程序中,并按照 this 中的所有操作进行操作发布。

我在下面的 kotlin 文件的开头添加了 System.loadLibrary:

class MainActivity : AppCompatActivity() {
    companion object {
        init {
            System.loadLibrary("opencv_java4")
        }
    }

    override fun onCreate(savedInstanceState: Bundle?) { }

但应用程序在启动后退出并显示以下内容:

09/22 16:08:04: Launching 'app' on Pixel 3a API 29.
$ adb shell am start -n "hasan.tts_mobile/hasan.tts_mobile.MainActivity" -a android.intent.action.MAIN -c android.intent.category.LAUNCHER
Waiting for process to come online...
Timed out waiting for process to appear on Pixel_3a_API_29 [emulator-5554].

最佳答案

多亏了这个answer ,它看起来在 opencv 4 中发生了一些变化,因此所有现有的教程都在谈论将 java 文件夹作为模块导入,而实际上需要导入的是 skd 文件夹本身。

您可以使用 JavaCV这是 OpenCV 的包装器,或者如下所示手动执行 OpenCV:

1- 来自 here下载适用于 Android 的 OpenCV – 4.1.1

2- 解压文件夹,解压到OpenCV-android-sdk,里面包含以下内容:

Hasans-Air:OpenCV-android-sdk hasan$ ls
LICENSE     README.android  samples     sdk

3- 前往 Android Studio 中的项目

4- 文件 -> 新建 -> 导入模块

5- 在第2点解压出来的文件夹中选择sdk文件夹,如图所示建议module name:sdk 但是你可以重命名为:sdkOpenCV4,不要忘记名字前面的:

enter image description here

6- 右击app,选择Open Module Settings,选择Dependencies,然后点击app模块,在 Declared Dependencies 点击 + 然后你会看到 OpenCV 模块,点击添加,点击 Apply 然后 添加:

enter image description here

enter image description here

enter image description here

enter image description here

7- 从 OpenCV SDK 复制 sdk/native/libs 文件夹,然后转到 tour application 文件夹 src/main 并粘贴它在其中,然后将 libs 文件夹重命名为 jnilibs,以便在您的应用程序 src/main 文件夹中 你将拥有:

enter image description here

8- 在 OnCreate 中,您可以在开始使用之前添加一个检查:

class MainActivity : AppCompatActivity() {

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


        val ocvLoaded = OpenCVLoader.initDebug()
        if (ocvLoaded) {
            Toast.makeText(
                this@MainActivity, "OpenCV loaded",
                Toast.LENGTH_SHORT
            ).show()
        } else {
            Toast.makeText(
                this@MainActivity, "Unable to load OpenCV",
                Toast.LENGTH_SHORT
            ).show()
            Log.d("openCV", "loader: ${OpenCVLoader.initDebug()}")
        }
    }
}

关于Android 应用程序在加载外部库时退出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58049574/

相关文章:

android - 使用 ndk 构建工具构建 opencv 时出现此错误

java - Android OpenCV圆圈HSV颜色检测

java - 为什么android隐藏蓝牙mac地址?

android - 在 android 中像简单形状(正方形和圆形)的设计者一样开发 View

android - 检测设备移动距离

opencv - Opencv中如何获取颜色格式?

python-3.x - 为什么 cv2.addweighted() 给出一个错误,即操作既不是 'array op array' ,也不是 'array op scalar' ,也不是 ' scalar op array' ?

如果不是 Activity intent-filter,则未收到 android BOOT_COMPLETED

c++ - Opencv train cascade 卡住,命中率为 1,误报率为 0

android - medianBlur 在 opencv4android 中不起作用