在 Android Studio 上通过 CMake 将 OpenCV 添加到 Native C 代码

2023-11-26

我正在尝试通过 Cmake 将 Opencv 包含到 android studio 项目中的本机 C 代码中。我在网上做了一些研究,并从网上下载了FindOpenCV.cmake文件并将其添加到我的android项目的app目录中。这也是 CMakeLists.txt 所在的位置。我使用本教程将 OpenCV 作为模块导入到我的 Android Studio 项目中:https://www.learn2crack.com/2016/03/setup-opencv-sdk-android-studio.html,当我运行时:

if(!OpenCVLoader.initDebug()){
   System.out.println("Opencv not loaded");
} else {
   System.out.println("Opencv loaded");
}

我知道 Opencv 已加载。

然而,由于我试图将 OpenCV 添加到我的本机代码中,而不是 Java 代码中,所以我认为我不能使用它。这是我现在拥有的 CMakeLists:

# Sets the minimum version of CMake required to build your native library.
# This ensures that a certain set of CMake features is available to
# your build.

cmake_minimum_required(VERSION 3.4.1)

set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} FindOpenCV.cmake)

# Specifies a library name, specifies whether the library is STATIC or
# SHARED, and provides relative paths to the source code. You can
# define multiple libraries by adding multiple add.library() commands,
# and CMake builds them for you. When you build your app, Gradle
# automatically packages shared libraries with your APK.

add_library(# Specifies the name of the library.
        apriltag

        # Sets the library as a shared library.
        SHARED

        # Provides a relative path to your source file(s).
        src/main/apriltag/apriltag.c
        src/main/apriltag/apriltag_jni.c
        src/main/apriltag/apriltag_quad_thresh.c
        src/main/apriltag/common/g2d.c
        src/main/apriltag/common/getopt.c
        src/main/apriltag/common/homography.c
        src/main/apriltag/common/image_f32.c
        src/main/apriltag/common/image_u8.c
        src/main/apriltag/common/image_u8x3.c
        src/main/apriltag/common/matd.c
        src/main/apriltag/common/pnm.c
        src/main/apriltag/common/string_util.c
        src/main/apriltag/common/svd22.c
        src/main/apriltag/common/time_util.c
        src/main/apriltag/common/unionfind.c
        src/main/apriltag/common/workerpool.c
        src/main/apriltag/common/zarray.c
        src/main/apriltag/common/zhash.c
        src/main/apriltag/common/zmaxheap.c
        src/main/apriltag/tag16h5.c
        src/main/apriltag/tag25h7.c
        src/main/apriltag/tag25h9.c
        src/main/apriltag/tag36artoolkit.c
        src/main/apriltag/tag36h10.c
        src/main/apriltag/tag36h11.c
        )

STRING(REPLACE "-O0" "-O4" CMAKE_C_FLAGS_DEBUG ${CMAKE_C_FLAGS_DEBUG})
STRING(REPLACE "-O2" "-O4" CMAKE_C_FLAGS_RELEASE ${CMAKE_C_FLAGS_RELEASE})

include_directories(src/main/apriltag/)
include_directories(${OpenCV_INCLUDE_DIRS})

find_package(OpenCV REQUIRED)

find_library(log-lib log)
find_library(jnigraphics-lib jnigraphics)
target_link_libraries(apriltag ${log-lib} ${jnigraphics-lib})

以下是我在构建 gradle 时遇到的错误:

By not providing "FindOpenCV.cmake" in CMAKE_MODULE_PATH this project has 
asked CMake to find a package configuration file provided by "OpenCV", but 
CMake did not find one. 
Could not find a package configuration file provided by "OpenCV" with any of 
the following names:
OpenCVConfig.cmake
opencv-config.cmake
Add the installation prefix of "OpenCV" to CMAKE_PREFIX_PATH or set 
"OpenCV_DIR" to a directory containing one of the above files. If "OpenCV" 
provides a separate development package or SDK, be sure it has been 
installed.

所以我的问题是:

  1. 我可以使用导入的 OpenCV 还是必须下载不同的 opencv 并将其存储在其他地方?
  2. 我必须在 CMakeLists.txt 中更改哪些内容才能构建 gradle?

理想情况下,我想要构建并能够添加#include <opencv2/opencv.hpp> and using namespace cv到我的 c 文件并添加使用 opencv 函数的函数。


2019 年 10 月 21 日更新:弃用 Git/Simpler Way,转而使用新的 AndroidOpenCVGradlePlugin

2018 年 5 月 22 日更新:添加了缺少的步骤 6。

2017 年 5 月 10 日更新:新解决方案通过 CMake 和 Android Gradle 插件 2.3.1 将 OpenCV 正确集成到应用程序中。使用 Android Studio 2.3.1 进行测试。

2017 年 5 月 11 日更新:已提供额外的解决方案

有两种包含 OpenCV 的方法。

使用 AndroidOpenCVGradlePlugin

Visit https://github.com/ahasbini/AndroidOpenCVGradlePlugin更多细节。

Git/更简单的方法罢工>

Visit https://github.com/ahasbini/Android-OpenCV更多细节。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Android Studio 上通过 CMake 将 OpenCV 添加到 Native C 代码 的相关文章

随机推荐