我正在尝试将 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
,不要忘记名字前面的:
6- 右击app
,选择Open Module Settings
,选择Dependencies,然后点击app
模块,在 Declared Dependencies
点击 +
然后你会看到 OpenCV
模块,点击添加,点击 Apply
然后 添加
:
7- 从 OpenCV SDK
复制 sdk/native/libs
文件夹,然后转到 tour application 文件夹 src/main
并粘贴它在其中,然后将 libs
文件夹重命名为 jnilibs
,以便在您的应用程序 src/main
文件夹中
你将拥有:
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/