我正在尝试通过 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.
所以我的问题是:
- 我可以使用导入的 OpenCV 还是必须下载不同的 opencv 并将其存储在其他地方?
- 我必须在 CMakeLists.txt 中更改哪些内容才能构建 gradle?
理想情况下,我想要构建并能够添加#include <opencv2/opencv.hpp>
and using namespace cv
到我的 c 文件并添加使用 opencv 函数的函数。