openCV安装
2019-10-21
termux
)cat /proc/cpuinfo |
不要把mk
和cmake
两种方法混淆
message
)(TODO)如果想直接看到打印信息,使用
WARNING
以上的级别进行打印
message(WARNING "fuck")
Build
->Build Output
->CMake warnings
查看Build
->Build Output
->Toggle View
查看
Android Studio
版本为3.5
OpenCV for Android 3.x
:只使用java
模块File
->New
->Import Module
->选择opencv文件夹下的sdk/java
文件夹,此时Android Studio
会自动加载Module name
File
->Project Structure
->Dependencies
->选择app
->添加Module Dependency
->选择opencvsdk/native/libs
下自己手机cpu对应的架构文件夹复制到app/libs
下build.gradle
的complieSdkVersion
,buildToolVersion
,minSdkVersion
,targetSdkVersion
改成和app
的build.gradle
一样app
的build.gradle
的android
节点下添加sourceSets { |
然后点击sync now
static { |
Caused by: CvException [org.opencv.core.CvException: OpenCV(4.1.1) /build/master_pack-android/opencv/modules/java/generator/src/cpp/utils.cpp:101: error: (-215:Assertion failed)
在Mat
与Bitmap
互转的时候长宽设置不对
OpenCV for Android 3.x
:使用native
模块CMakeLists.txt
编写在CMakeLists.txt
中确定两个关键路径
/sdk/native/jni/include
:头文件位置/sdk/native/libs/${ANDROID_ABI}/libopencv_java3.so
:库位置cmake_minimum_required(VERSION 3.4.1) |
build.gradle
在android
节点下插入
sourceSets { |
还没有成功
CMakeLists.txt
编写在CMakeLists.txt
中确定一个关键路径
/sdk/native/jni/include
:头文件位置cmake_minimum_required(VERSION 3.4.1) |
java.lang.UnsatisfiedLinkError: dlopen failed: library "libopencv_java3.so" not found
这是由于忘记了上面的第2步.Android Studio默认的jni
路径为app/src/main/jniLibs
,除了在CMakeLists.txt
中导入opencv的库以外还需要二选一
libs/
下一级的各个${ANDROID_ABI}
文件夹)移动到jniLibs
下build.gradle
中修改默认jni
路径(见上面第2步)undefined reference to *
如std::ios_base::Init::Init()
等
未解决
undefined reference to `AndroidBitmap_getInfo'
各类AndroidBitmap
的问题
在CMakeLists.txt
增加
target_link_libraries( |
参考:CSDN,这是一个很小的库,展示一个稳定的,基于C语言的接口,使本机代码安全地访问Java对象的像素缓冲区的位图
OpenCV for Android 4.x
:使用native
模块同3.x
版本的方法一
java.lang.UnsatisfiedLinkError: dlopen failed: library "libc++_shared.so" not found
(不确定的解决方法)在app的gradle中修改
externalNativeBuild { |
不要使用gnustl_shared
或gnustl_static
,已经过时
java.lang.UnsatisfiedLinkError: dlopen failed: library "libopencv_java4.so" not found
解决方案同3.x
版本
OpenCV for Android 4.x
:使用java
+native
模块加载native
模块
File
->New
->Import Module
->选择opencv文件夹下的sdk/java
文件夹,自己定义模块的名字
修改模块的gradle文件
// 将原来的application改成library |
native/lib
模块javacv
(使用不完整OpenCV 4.1.0
)不同导入方法,import
的class位置可能不同
opencv
部分功能的初始化Loader.load(opencv_java.class);// 不能直接放在class开头 |
app
的build.gradle
示例(最外节点)
ext { |
lib
导入根据手机具体的cpu架构进行导入
app
的build.gradle
dependencies { |
将文件(视具体情况)
javacpp.jar
javacv.jar
openblas.jar
openblas-android-arm64.jar
opencv.jar
opencv-android-arm64.jar
app/libs/
文件夹里-android-arm
之类的库)2019-10-27 16:01:32.439 29256-29322/? E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #1 |
opencv
初始化2019-10-27 16:00:43.930 28933-28933/? E/AndroidRuntime: FATAL EXCEPTION: main |
openblas
的相关jar
库2019-10-27 15:59:23.158 28618-28618/? E/AndroidRuntime: FATAL EXCEPTION: main |
OpenCV 4.x
source codeAndroid Studio的sdk下的ndk:ndk/build/cmake/android.toolchain.cmake
(第112行)
elseif(ANDROID_TOOLCHAIN_NAME MATCHES "-[0-9].[0-9]$") |
opencv 4.x
源码:/platforms/android/build_sdk.py
(第113行)
self.cmake_vars = dict( |
opencv 4.x
源码:/CMakeLists.txt
(第426行和429行)(可以根据需要修改)
# OCV_OPTION(BUILD_SHARED_LIBS "Build shared libraries (.dll/.so) instead of static ones (.lib/.a)" NOT (ANDROID OR APPLE_FRAMEWORK) ) |
JAVA_HOME
使用Android Studio的JDK位置
export JAVA_HOME=/home/lynx/fuck_mount/AS/jre |
platforms/android/build_sdk.py
,完成编译./build_sdk.py --ndk-path {ndk路径} --sdk_path {android sdk路径} {目标位置} {opencv源码位置} |
sdk-path
:Android Studio的SDK目录ndk-path
:Android Studio的SDK目录下ndk/{ndk版本号文件}
不需要额外安装的软件:jdk
,ninja-build
,ndk
.直接使用android studio的即可
不需要安装的软件:ant
,ccache
目前还没能成功编译android project
能够混合使用:
OpenCV 3.x
的java
库(配置见上)java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.example.stitch-sPWgBONIqUrdX9XLB1OY6w==/base.apk"],nativeLibraryDirectories=[/data/app/com.example.stitch-sPWgBONIqUrdX9XLB1OY6w==/lib/arm64, /data/app/com.example.stitch-sPWgBONIqUrdX9XLB1OY6w==/base.apk!/lib/arm64-v8a, /system/lib64, /product/lib64]]] couldn't find "libnative-lib.so"
缺少相应ABI的so
库(目前计时在gradle里加入abiFilters
也没有用),上述报错是因为没有编译全ABI.ABI
配置:opencv-4.x/platforms/android/ndk-18-api-level-21.config.py
OpenCV
source code目前适用4.x
,其余没试过
sudo apt install libgtk2.0-dev pkg-config |
cmake
cd {生成makefile的位置} |
make
cd {生成makefile的位置} |
make install
make install {安装的位置} |
cmake-gui
sudo apt install cmake-gui |
cmake-gui
cd {build二进制文件的目录} |
Configure
->Unix Makefiles
:Use default native compilers
->finish
狂点Configure
知道没有红色区域
赋值
变量名 | 赋值 |
---|---|
CMAKE_BUILD_TYPE |
Release |
CMAKE_INSTALL_PREFIX |
{自己定的cmake_install 路径} |
OPENCV_GENERATE_PKGCONFIG |
勾选 |
OPENCV_EXTRA_MODULES_PATH |
{opencv-contrib}源代码/modules |
BUILD_EXAMPLES |
勾选 |
狂点Configure
Generate
,等到Generating done
在源代码路径make
sudo make -j4 # 具体看有多少cpu |
配置opencv4.pc
(2选1)
PKG_CONFIG_PATH
:增加{你cmake_install的路径}/lib/
(opencv4.pc
所在的文件夹路径)opencv4.pc
到/usr/lib/pkgconfig
配置库路径,(新建)/etc/ld.so.conf.d/opencv.conf
{你cmake_install路径}/lib/ # 自己的lib路径 |
sudo ldconfig |
如果是
opencv.pc
将opencv4
改成opencv
pkg-config --modversion opencv4 |
CMake
导入OpenCV
模块:find_package(OpenCV REQUIRED) |
之后cmake
出现By not providing "FindOpenCV.cmake" in CMAKE_MODULE_PATH ...
:
这是由于没有设置环境变量OpenCV_DIR
,设置为OpenCV
编译后的目录下含有OpenCVConfig.cmake
的对应路径
1 / 1