声明

以下[参考]链接,如有侵权,请联系删除,在此先感谢在网络上无私奉献的人们~
如有错误,请联系更正,GitHub同文地址

文章目录

  • 声明
  • VS 篇
    • 编译 OpenCV + OpenCV_Contrib (+ Qt) + VS2015
      • 1. 编译环境准备
      • 2. 编译配置
      • 3. 执行编译
    • Visual Studio 项目使用 OpenCV
      • 1. 创建新项目
      • 2. 在 VS 中配置 OpenCV
      • 3. 通过 CMakeLists.txt 生成 VS 解决方案
      • 4. 项目调试进入 OpenCV 源码
    • 注意事项
      • 1. 编译 Qt 版时 opencv_cvv 模块的 stringutils.cpp 文件出现“常量中有换行符”的错误
      • 2. 编译 Qt 版时 opencv_cvv 模块的 dual_filter_view.cpp 文件出现“使用未定义的xxx”的错误
    • 参考
  • AS 篇
    • 编译 OpenCV + OpenCV_Contrib + Android
      • 1. 编译环境准备
      • 2. 编译配置
      • 3. 执行编译
    • Android Studio 项目使用 OpenCV
      • 1. 创建项目
      • 2. 在项目中导入 OpenCV
      • 3 修改 OpenCV build.gradle
      • 4 设置 Module 依赖
      • 5 剔除 OpenCV Manager 依赖
      • 6 配置CMakeLists.txt,加载 OpenCV SO
      • 7 修改代码,调用OpenCV方法
    • 注意事项
      • 1. openCVLibrary340 编译错误
      • 2. cmake vs ndkBuild
      • 3. so 文件引用错误
      • 4. 摄像头竖屏全屏的设置
      • 5. Session 'app': Error Installing APKs
      • 6. No implementation found for long org.opencv.core.Mat.n_Mat()
      • 7. 依赖模块 openCVLibrary340 编译找不到符号 BackgroundSubtractor (bgsegm 文件夹) / DenseOpticalFlow (optflow 文件夹)
    • 参考
      • 1. 编译
      • 2. 相机
      • 3. 其他

VS 篇

编译 OpenCV + OpenCV_Contrib (+ Qt) + VS2015

1. 编译环境准备

1.1 下载 OpenCV 3.4.0 源码 opencv-3.4.0.zip (假定目录为 <opencv-source>)

1.2 下载 OpenCV_contrib 3.4.0 源码 opencv_contrib-3.4.0.zip (假定目录为 <opencv-contrib>)

注意:必须与 opencv 版本一致

1.3 安装 cmake-gui 3.11.1 x64 cmake 的 GUI 工具 cmake-3.11.1-win64-x64.msi

1.4 安装 Visual Studio 2015

1.5 (可选)安装 Qt 5.11.0 qt-opensource-windows-x86-5.11.0.exe

  • 选择必装组件 MSVC 2015 64-bit,如果后续使用 MinGW 编译则需安装对应组件,本文只介绍 VS 编译

    注意:如果后续想使用 Qt Creator 开发,必须勾选 Qt Charts,否则 qmake 时会报错

  • 安装后配置环境变量

  • VS 中配置 Qt 关联,安装完后打开 VS,点击 Menu -> Qt VS Tools -> Qt Options 配置安装的 MSVC2015 组件

2. 编译配置

2.1 新建文件夹 <build>/vs_opencv_contrib

2.2 运行 cmake-gui.exe

2.3 在 where is the source code 填入 <opencv-source>/source 目录

2.4 在 where to build the binaries 填入 <build>/vs_opencv_contrib 目录

2.5 点击 configure,弹出选择编辑器的窗口,选择 Visual Studio 14 2015 Win64 (Win64 是指编译 VS2015 x64 工程,不带 Win64 的则为 x86 工程),默认第一个选项 Use default native compilers

2.6 配置完后会出现很多红色的配置项,搜索 extra,在 OPENCV_EXTRA_MODULES_PATH 添加路径 <opencv-contrib>/modules

2.7 (可选) 勾选 WITH_QT,再次 configure 后会出现关于 Qt 的路径配置参数,确保与下图一致

2.8 勾选需要的配置,点击 configure 后再点击 generate,显示:

Configuring done
Generating done

3. 执行编译

3.1 在上述编译配置完成后,打开 <build>/OpenCV.sln,设置要编译的模式(debug 还是 release,本文选择的是 debug x64)

3.2 (可选)配置 Qt 的库链接(后续如果出现编译错误请参考 注意事项)

  • 点击 Menu -> 视图 -> 其他窗口 -> 属性管理器,打开 opencv_highgui -> Debug | x64 -> Microsoft.Cpp.x64.user 全局配置页,按下图配置

  • 删除 opencv_highguiopencv_cvv 项目属性配置页的多余配置

3.3 在解决方案的 CMakeTargets 文件夹下右击 ALL_BUILD,选择 生成 (注意:耗费时间较长),成功后再右击 INSTALL,选择 仅用于项目 -> 仅生成 INSTALL,再次成功后,所编译的头文件和库在 <build>/vs_opencv_contrib/install 文件夹下

3.4 配置 opencv 的环境变量,在 Path 中加入 <build>\vs_opencv_contrib\install\x64\vc14\bin

Visual Studio 项目使用 OpenCV

1. 创建新项目

打开 VS 2015,新建一个空白的 win32 的控制台工程

2. 在 VS 中配置 OpenCV

打开属性管理器中的全局配置页 Microsoft.Cpp.x64.user,按下图配置

(注意:配置管理器中,Debug 和 Release 下的 Microsoft.Cpp.x64.user 是同一个文件,所以在生成不同模式时需要更改配置,否则编译会出错;该文件属于全局配置,所有 VS 项目不用再次配置)

  • Debug 版

  • Release 版

    • 将 debug 版中的 附加依赖项 改成 *.lib 即可

3. 通过 CMakeLists.txt 生成 VS 解决方案

3.1 运行 cmake-gui.exe

3.2 将 CMakeLists.txt 拖到 where is the source code

3.3 在 where to build the binaries 填入输出目录

3.4 点击 configure,弹出选择编辑器的窗口,选择 Visual Studio 14 2015 Win64,默认第一个选项 Use default native compilers

3.5 运行完后出现 OpenCV 找不到的报错,修改配置 OPENCV_DIR<build>/vs_opencv_contrib/install/x64/vc14/lib,然后再次 configure

3.6 点击 generate,最终解决方案会在输出目录中

4. 项目调试进入 OpenCV 源码

注意:之前程序不运行时按 F12 能进入 opencv 源码,按该步骤操作后,必须在 debug 模式下,F11 进入 opencv 源码,F12 只能进入头文件,请斟酌操作

4.1 修改全局配置如下

4.2 点击 Menu -> 工具 -> 选项 -> 调试 -> 常规,勾选 启用源服务器支持 及其子项

4.3 点击 Menu -> 工具 -> 选项 -> 调试 -> 符号,添加并勾选符号文件位置 <build>\vs_opencv_contrib\bin\Debug

4.4 修改 opencv 的环境变量地址为 <build>\vs_opencv_contrib\bin\Debug

注意事项

1. 编译 Qt 版时 opencv_cvv 模块的 stringutils.cpp 文件出现“常量中有换行符”的错误

原因:可能是文件编码方式导致的

解决:在源码文件夹 <opencv-contrib>/modules/cvv/src/stfl 中重新建立同名文本(删除原文件后改名),并复制cpp文件内容

2. 编译 Qt 版时 opencv_cvv 模块的 dual_filter_view.cpp 文件出现“使用未定义的xxx”的错误

原因:opencv 340 对 c++11 的兼容性问题,官方在 341 版本中已修复

解决:将源码文件 <opencv-source>/modules/core/include/opencv2/core/cvdef.h L436 替换成修复语句

#  if __cplusplus >= 201103L || (defined(_MSC_VER) && _MSC_VER >= 1900/*MSVS 2015*/)

参考

[1] OpenCV学习笔记(一)——OpenCV3.1.0+VS2015开发环境配置 - CSDN博客

[2] Visual Studio 2015一分钟配置opencv及CMake编译OpenCV3.1(含opencv-contrib) - CSDN博客

[3] CMake 简介和 CMake 模板 - 简书

[4] 调试opencv程序,怎么在vs运行下直接调到opencv的源码,终极,cmake后还要有pdb文件链接 - CSDN博客

[5] Win10+VS2013+CMake-gui编译和配置OpenCV-3.2.0 | Shaun’s Space

[6] Qt+Opencv+cmake在win10系统下的完美配置 - CSDN博客

[7] OpenCV3.2+Qt5.8.0+Win10配置和使用----(4)配置环境变量+编译opencv&opencv-contrib - CSDN博客

[8] OpenCV 3.4 编译和配置 - 胡马依北风 - 博客园

[9] Win10(x64)+Qt5.8(MSVC2015)+OpenCV3.2.0配置过程 - CSDN博客


AS 篇

编译 OpenCV + OpenCV_Contrib + Android

1. 编译环境准备

1.1 下载 OpenCV 3.4.0 源码 opencv-3.4.0.zip (假定目录为 <opencv-source>)

1.2 下载 OpenCV_contrib 3.4.0 源码 opencv_contrib-3.4.0.zip (假定目录为 <opencv-contrib>)

注意:必须与 opencv 版本一致

1.3 安装 cmake-gui 3.11.1 x64 cmake 的 GUI 工具 cmake-3.11.1-win64-x64.msi

1.4 安装 Mingw 编译工具 mingw-get-setup.exe (假定目录为 <mingw-dir>,此案例中为安装目录为 C:\MinGW)

  • 可以选择 mingw32 或者 mingw64 都是可以的。后续采用的是 mingw32

  • 选择需要安装的组件,右键选择 Mark for Installation,之后选择 Menu -> Installation -> Apply Changes (过程漫长)

  • 新建系统变量/用户变量 MinGW,目录为 <mingw-dir>,并将 %MinGW%\bin 添加进系统变量(需重启电脑生效)/用户变量(无需) Path (建议用 编辑文本 检查下或直接点击 编辑文本 新增,避免出现多余的引号错误)

1.5 下载 Android NDK r15c x64 android-ndk-r15c-windows-x86_64.zip (假定目录为 <ndk-dir>)

注意:r16b 版 <ndk-dir>/platforms/android-x/x/usr/include 的文件夹位置已移动到 <ndk-dir>/ndk-bundle/sysroot/usr/include,影响后续 cmake 编译

1.6 安装 java jdk 8 jdk-8u172-windows-x64.exe

  • jdk (假定目录为 <jdk-dir>)安装包包含 jre (假定目录为 <jre-dir>)

  • 安装后配置环境变量,新建系统变量/用户变量 JAVA_HOME,目录为 <java-dir>,并将 %JAVA_HOME%\bin 添加到 Path 环境变量中

  • 用 cmd 可测试是否正确安装与配置

1.7 安装 Android Studio android-studio-ide-173.4697961-windows.exe

  • 官网中仅提供无 sdk 版,首次打开会提示 Unable to access Android SDK add-on list

  • 原因:在第一次安装 AS,启动后检测到电脑没有 SDK

  • 解决方案:点击 Cancel,在后续的界面安装 SDK (需要翻墙下载)

1.8 安装 Android SDK >= 19 (假定目录为<sdk-dir>)

注意:SDK 的版本安装全一点,从 API_LEVEL = 19 以上的都下了最好。可通过 AS 的 SDK Manager 管理安装

1.9 下载 Java ANT 1.10.3 apache-ant-1.10.3-bin.zip (假定目录为<ant-dir>)

注意:1.9.x 依赖 Java5 runtime,1.10.x 依赖 Java8 runtime

2. 编译配置

2.1 新建文件夹 <build>/armeabi-v7a

2.2 运行 cmake-gui.exe

2.3 在 where is the source code 填入 <opencv-source> 目录

2.4 在 where to build the binaries 填入 <build>/armeabi-v7a 目录

2.5 点击 Add Entry,添加 ANDROID_NDK,并设定为 PATH 类目,填入 <nkd-dir> 目录

2.6 点击 Add Entry,添加 ANDROID_NDK_HOST_X64,并设定为 BOOL 类目,勾选 (NDK 为 64 位版本则勾选,否则不勾选)

2.7 点击 Add Entry,添加 CMAKE_TOOLCHAIN_FILE,并设定为 FILEPATH 类目,设置路径为 <opencv-source>/platforms/android/android.toolchain.cmake

2.8 点击 Add Entry,添加 CMAKE_BUILD_WITH_INSTALL_RPATH,并设定为 BOOL 类目,勾选

2.9 点击 Add Entry,添加 ANDROID_SDK,并设定为 PATH 类目,设置路径为 <sdk-dir>

2.10 点击 Add Entry,添加 ANDROID_ABI,并设定为 STRING 类目,设置值为 armeabi-v7a

注意:这里的选项也即你需要编译的库类型,如果你想要编译 armeabi 或者 X86 都在这个值上修改 (cpu架构,只能一个一个编译)

2.11 点击 Add Entry,添加 ANDROID_NATIVE_API_LEVEL,并设定为 STRING 类目,设置值为 19

注意:这里的选项也即你需要编译的 API-LEVEL,我定的是 19,你也可以用 20 或者 21;编译 x86 时可能需要设置高一些,例如 19 改为 21

2.12 点击 Add Entry,添加 ANDROID_EXECUTABLE,并设定为 FILEPATH 类目,设置值为 <sdk-dir>/tools/android.bat (废弃:会导致编译问题)

注意:若没设置,会出现如下警告

警告1:OpenCV requires Android SDK tools revision 14 or newer.

警告2:Can not find any SDK target compatible with…

2.13 点击 Configure,选择 MinGW Makefile 作为编译选项,并在接下来的选项中选择 Specify toolchain file for cross-compiling,点击 Next,对应的路径选择 <opencv-source>/platforms/android/android.toolchain.cmake,点击 Finish

等待configure完成,如下图所示:

2.14 修改 ANDROID_SDK_TARGET 键,将其值改为 android-23 (废弃)

2.15 添加 opencv-contrib 模块,搜索 extra,在 OPENCV_EXTRA_MODULES_PATH 添加路径 <opencv-contrib>/modules

2.16 重新添加 ANDROID_NDK,点击 Add Entry,添加 ANDROID_NDK,并设定为 PATH 类目,对应目录为 <nkd-dir> 后,再点击 configure

  • configure 完后出现的警告可以不管,警告内容仍为红色

  • 虽然已配过,但是第一次 configure 后该项已消失,如果不添加,再次 configure 会报错:

2.17 参数调整

  • BUILD_opencv_world = OFF (生成 .so 库 libopencv_world.so,这是一个集合,不清楚和默认编译的 libopencv_java3.so 有什么区别,默认不开启,如果开启的话不会复制 java 层函数,也就是 cmake 的 gui 界面会显示 Java wrappers: NO)
  • BUILD_SHARED_LIBS = OFF (如果 On 则只编译 so 库)
  • WITH_CUDA = OFF (CUDA 是 NVidia 推出的并行计算架构,编译非安卓 SDK 时建议添加)
  • WITH_OPENCL = ON (因为我们编译的是 android sdk,所以建议添加移动端的并行架构支持)
  • WITH_OPENCL_SVM = ON (建议开启共享虚拟内存)
  • ANT_EXECUTABLE = <ant-dir>/bin/ant.bat (java 封装,便于 AS 导入模块,没有配置的话无法生成 libopencv_java3.so)

2.18 修改 opencv-contrib 的对应 CMakeLists.txt

这是因为 Java 在调用 OpenCV 时,需要对应的 Java Wrapper。默认 opencv-contrib 是不编译生成 Java Wrapper 的。具体操作为:进入 <opencv-contrib>/modules 每一个子目录中,在 CMakeLists.txt 文件中的

ocv_define_module(******)
ocv_define_module(****** WRAP python)

语句都统一改成

ocv_define_module(****** WRAP python java)

即在 ocv_define_module 没有 WRAP 或者有 WRAP 但没有包括 java 的,都更改为包含 WRAP Java

上诉设定调整好后,再次点击 configure 后再点击 generate,显示:

Configuring done
Generating done

3. 执行编译

在上述编译配置完成后,通过命令行工具 cmd (管理员身份) 进入 <build>/armeabi-v7a 目录,执行

mingw32-make -j4

即可开始编译

但是执行到快要结束的时候会发生多个错误:

错误1

fatal error: opencv2/reg.hpp: No such file or directory#include "opencv2/reg.hpp"^
compilation terminated.

错误2

fatal error: opencv2/datasets.hpp: No such file or directory#include "opencv2/datasets.hpp"^
compilation terminated.

解决方案

进入 <build>/armeabi-v7a/modules/java/gen
打开 reg.cpp 注释掉

// #include "opencv2/reg.hpp"

打开 datasets.cpp 注释掉

// #include "opencv2/datasets.hpp"

然后执行

mingw32-make install

注意:这里千万别执行 mingw32-make -j4 不然仍然会出现这个错误。

一般而言,都会出现上面的错误,所以执行了 mingw32-make install 之后,如果类似下面的图片的话,整个编译库就编译和安装了 (相关的安装库在 <build>/armeabi-v7a/install/sdk 中):

Android Studio 项目使用 OpenCV

1. 创建项目

2. 在项目中导入 OpenCV

把 OpenCV 导入到项目中 (Menu -> File -> New -> Import_Module)

  • Source-directory: <build>/armeabi-v7a/install/sdk/java
  • Module name: Android Studio 能自动填充这个信息 openCVLibrary340

接下来,Android Studio 开始导入 module ,完成后,能够看到 import-summary.txt

同时,你还会看到一个错误信息,说找不到 android-14 ,这是因为我们下载的 OpenCV 中的 build.gradle 里配置的是用 android API version 14 编译,默认情况下,我们的 Android SDK 里已经不包含 android-14 这个版本了

3 修改 OpenCV build.gradle

在 Android Studio 引入 OpenCVLiberary340 模块后,编辑 OpenCV 的 build.gradle:

  • 替换 apply plugin: com.android.application 为 apply plugin: com.android.library
  • 删除 applicationId "org.opencv"

为解决 android API 版本问题,需要对照 app 修改 OpenCV 的 build.gradle 参数

查看 app/build.gradle,对应修改 openCVLibrary340/build.gradle,然后在文本域上方点击 Try Again 同步配置

  • compileSDKVersion
  • buildToolsVersion
  • minSdkVersion
  • targetSdkVersion

4 设置 Module 依赖

因为 app 里要使用 opencv 库里提供的方法,需要在 app 的依赖里增加刚导入进来的 opencv module

打开 project structure (Menu -> File -> Project_Structure) 进行配置

5 剔除 OpenCV Manager 依赖

复制 <build>/armeabi-v7a/install/sdk/native/libs 到项目 OpenCVTest1/openCVLibrary340/src/main 目录下,重命名为 jniLibs;复制 <build>/armeabi-v7a/install/sdk/native/jni/include 到项目 OpenCVTest1/openCVLibrary340/src/main/cpp 目录下;并在 app/build.gradle 添加以下代码:

sourceSets.main {jniLibs.srcDirs = ['src/main/libs', 'src/main/jniLibs']jni.srcDirs = []
}

代码中不使用 OpenCVLoader.initAsync(...)

6 配置CMakeLists.txt,加载 OpenCV SO

CMakeLists 的主要作用就是告诉NDK我的源代码有哪些,要包含哪些头文件,我的第三方依赖库有哪些,要用什么方式编译

该文件没有配置好的话会影响编译

注意:不管是Windows系统还是Linux系统,cmake中的路径分割符均为 /

cmake_minimum_required(VERSION 3.4.1)set(CMAKE_VERBOSE_MAKEFILE on)set(libs ${PROJECT_SOURCE_DIR}/src/main/jniLibs)
include_directories(${PROJECT_SOURCE_DIR}/src/main/cpp/include)add_library(libopencv_java3 SHARED IMPORTED )
set_target_properties(libopencv_java3 PROPERTIESIMPORTED_LOCATION "${libs}/${ANDROID_ABI}/libopencv_java3.so")add_library(libopencv_calib3d STATIC IMPORTED )
set_target_properties(libopencv_calib3d PROPERTIESIMPORTED_LOCATION "${libs}/${ANDROID_ABI}/libopencv_calib3d.a")add_library(libopencv_core STATIC IMPORTED )
set_target_properties(libopencv_core PROPERTIESIMPORTED_LOCATION "${libs}/${ANDROID_ABI}/libopencv_core.a")add_library(libopencv_features2d STATIC IMPORTED )
set_target_properties(libopencv_features2d PROPERTIESIMPORTED_LOCATION "${libs}/${ANDROID_ABI}/libopencv_features2d.a")add_library(libopencv_flann STATIC IMPORTED )
set_target_properties(libopencv_flann PROPERTIESIMPORTED_LOCATION "${libs}/${ANDROID_ABI}/libopencv_flann.a")add_library(libopencv_highgui STATIC IMPORTED )
set_target_properties(libopencv_highgui PROPERTIESIMPORTED_LOCATION "${libs}/${ANDROID_ABI}/libopencv_highgui.a")add_library(libopencv_imgcodecs STATIC IMPORTED )
set_target_properties(libopencv_imgcodecs PROPERTIESIMPORTED_LOCATION "${libs}/${ANDROID_ABI}/libopencv_imgcodecs.a")add_library(libopencv_imgproc STATIC IMPORTED )
set_target_properties(libopencv_imgproc PROPERTIESIMPORTED_LOCATION "${libs}/${ANDROID_ABI}/libopencv_imgproc.a")add_library(libopencv_ml STATIC IMPORTED )
set_target_properties(libopencv_ml PROPERTIESIMPORTED_LOCATION "${libs}/${ANDROID_ABI}/libopencv_ml.a")add_library(libopencv_objdetect STATIC IMPORTED )
set_target_properties(libopencv_objdetect PROPERTIESIMPORTED_LOCATION "${libs}/${ANDROID_ABI}/libopencv_objdetect.a")add_library(libopencv_photo STATIC IMPORTED )
set_target_properties(libopencv_photo PROPERTIESIMPORTED_LOCATION "${libs}/${ANDROID_ABI}/libopencv_photo.a")add_library(libopencv_shape STATIC IMPORTED )
set_target_properties(libopencv_shape PROPERTIESIMPORTED_LOCATION "${libs}/${ANDROID_ABI}/libopencv_shape.a")add_library(libopencv_stitching STATIC IMPORTED )
set_target_properties(libopencv_stitching PROPERTIESIMPORTED_LOCATION "${libs}/${ANDROID_ABI}/libopencv_stitching.a")add_library(libopencv_superres STATIC IMPORTED )
set_target_properties(libopencv_superres PROPERTIESIMPORTED_LOCATION "${libs}/${ANDROID_ABI}/libopencv_superres.a")add_library(libopencv_video STATIC IMPORTED )
set_target_properties(libopencv_video PROPERTIESIMPORTED_LOCATION "${libs}/${ANDROID_ABI}/libopencv_video.a")add_library(libopencv_videoio STATIC IMPORTED )
set_target_properties(libopencv_videoio PROPERTIESIMPORTED_LOCATION "${libs}/${ANDROID_ABI}/libopencv_videoio.a")add_library(libopencv_videostab STATIC IMPORTED )
set_target_properties(libopencv_videostab PROPERTIESIMPORTED_LOCATION "${libs}/${ANDROID_ABI}/libopencv_videostab.a")add_library(libopencv_ts STATIC IMPORTED )
set_target_properties(libopencv_ts PROPERTIESIMPORTED_LOCATION "${libs}/${ANDROID_ABI}/libopencv_ts.a")add_library( # Sets the name of the library.native-lib# Sets the library as a shared library.SHARED# Provides a relative path to your source file(s).src/main/cpp/native-lib.cpp )find_library( # Sets the name of the path variable.log-lib# Specifies the name of the NDK library that# you want CMake to locate.log )target_link_libraries( # Specifies the target library.native-lib android loglibopencv_java3libopencv_calib3dlibopencv_corelibopencv_features2dlibopencv_flannlibopencv_highguilibopencv_imgcodecslibopencv_imgproclibopencv_mllibopencv_objdetectlibopencv_photolibopencv_shapelibopencv_stitchinglibopencv_superreslibopencv_videolibopencv_videoiolibopencv_videostab# Links the target library to the log library# included in the NDK.${log-lib} )

7 修改代码,调用OpenCV方法

修改文件 MainActivity.java,添加引用

import org.opencv.android.OpenCVLoader;
import android.util.Log;

在函数 onCreate 最后增加如下代码,加载OpenCV动态链接库,最然后重新编译 (Menu -> Build -> Rebuild Project)。

if (!OpenCVLoader.initDebug()) {Log.e(this.getClass().getSimpleName(), "OpenCVLoader.initDebug(), not working.");
} else {Log.d(this.getClass().getSimpleName(), "OpenCVLoader.initDebug(), working.");
}

注意事项

1. openCVLibrary340 编译错误

Execution Failed for task :app:compileDebugJavaWithJavac in Android Studio

未找到原因,直接删掉无法编译的库 openCVLibrary340/src/main/java/org/opencv/bgsegm 和 optflow 目录,重新编译。

2. cmake vs ndkBuild

如果您想要将 Gradle 关联到现有 ndk-build 项目,请使用 ndkBuild {} 块而不是 cmake {},并提供 Android.mk 文件的相对路径。如果 Application.mk 文件与您的 Android.mk 文件位于相同目录下,Gradle 也会包含此文件。建议使用 cmake。

3. so 文件引用错误

error: ‘src/main/jniLibs/armeabi-v7a/libopencv_java3.so’, needed by ‘…/…/…/…/build/intermediates/cmake/debug/obj/armeabi-v7a/libnative-lib.so’, missing and no known rule to make it

解决:使用 PROJECT_SOURCE_DIR 当前工程的源码路径

如果是ABI类型错误,则需要在app\build.gradle中设置abiFilters

4. 摄像头竖屏全屏的设置

因为opencv要在横屏时才能得到较好的结果,那么我可以先把竖屏时得到的图像顺时针旋转90度,这样就和横屏时一样了。在 openCVLibrary340/src/main/java/org/opencv/android/CameraBridgeViewBase.java 文件修改 deliverAndDrawFrame() 函数中,修改以下部分

if (canvas != null) {canvas.rotate(90,0,0);float scale = canvas.getWidth() / (float)mCacheBitmap.getHeight();float scale2 = canvas.getHeight() / (float)mCacheBitmap.getWidth();if(scale2 > scale){scale = scale2;}if (scale != 0) {canvas.scale(scale, scale,0,0);}canvas.drawBitmap(mCacheBitmap, 0, -mCacheBitmap.getHeight(), null);// canvas.drawColor(0, android.graphics.PorterDuff.Mode.CLEAR);Log.d(TAG, "mStretch value: " + mScale);/*  if (mScale != 0) {canvas.drawBitmap(mCacheBitmap, new Rect(0,0,mCacheBitmap.getWidth(), mCacheBitmap.getHeight()),new Rect((int)((canvas.getWidth() - mScale*mCacheBitmap.getWidth()) / 2),(int)((canvas.getHeight() - mScale*mCacheBitmap.getHeight()) / 2),(int)((canvas.getWidth() - mScale*mCacheBitmap.getWidth()) / 2 + mScale*mCacheBitmap.getWidth()),(int)((canvas.getHeight() - mScale*mCacheBitmap.getHeight()) / 2 + mScale*mCacheBitmap.getHeight())), null);} else {canvas.drawBitmap(mCacheBitmap, new Rect(0,0,mCacheBitmap.getWidth(), mCacheBitmap.getHeight()),new Rect((canvas.getWidth() - mCacheBitmap.getWidth()) / 2,(canvas.getHeight() - mCacheBitmap.getHeight()) / 2,(canvas.getWidth() - mCacheBitmap.getWidth()) / 2 + mCacheBitmap.getWidth(),(canvas.getHeight() - mCacheBitmap.getHeight()) / 2 + mCacheBitmap.getHeight()), null);}*/...
}

5. Session ‘app’: Error Installing APKs

Unknown failure (at android.os.Binder.execTransact(Binder.java:697))

Error while Installing APKs

解决:打开配置 Menu -> File -> Settings -> Build, Execution, Deployment -> Instant Run 去掉第一个 Enable 的勾选,关闭快速运行

6. No implementation found for long org.opencv.core.Mat.n_Mat()

原因:没有启动OpenCV,无法使用OpenCV中的类给对象初始化。一般OpenCV的启动都选择在OnResume方法中完成,也就是说,在OnResume方法之前调用OpenCV中的任意方法都是错误的。

解决:在 onResume 中检测OpenCV的库文件是否加载完毕,加载完毕再运行

private BaseLoaderCallback mOpenCVCallBack = new BaseLoaderCallback(this) {@Overridepublic void onManagerConnected(int status) {switch (status) {case LoaderCallbackInterface.SUCCESS://DO YOUR WORK/STUFF HERELog.i("OpenCV", "OpenCV loaded successfully.");break;default:super.onManagerConnected(status);break;}}};@Overridepublic void onResume(){super.onResume();//检测OpenCV的库文件是否加载完毕if (!OpenCVLoader.initDebug()) {Log.d("OpenCV", "Internal OpenCV library not found. Using OpenCV Manager for " +"initialization");//OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_3_4_0, this, baseLoaderCallback); // not access OpenCV Manager} else {Log.d("OpenCV", "OpenCV library found inside package. Using it!");mOpenCVCallBack.onManagerConnected(LoaderCallbackInterface.SUCCESS);}}

7. 依赖模块 openCVLibrary340 编译找不到符号 BackgroundSubtractor (bgsegm 文件夹) / DenseOpticalFlow (optflow 文件夹)

解决:在所有缺失引用的文件下添加对应引用:import org.opencv.video.BackgroundSubtractor; / import org.opencv.video.DenseOpticalFlow;

参考

1. 编译

  • [1.1] Android开发–Opencv for android cmake编译 - 简书
  • [1.2] Windows下编译OpenCV+OpenCV_Contrib的Android模块 | 知识沉言
  • [1.3] Android Studio集成OpenCV - 简书
  • [1.4] 使用Android Studio 3.0 (>=2.2)和Cmake (CMakeLists)让OpenCV 3.4 飞起来 - CSDN博客
  • [1.5] OpenCV for Andorid 的总结 - 个人总结 - SegmentFault 思否
  • [1.6] chaoyangnz/opencv3-android-sdk-with-contrib: Build OpenCV3 Android SDK with contrib modules
  • [1.7] OpenCV -Android Studio 中使用(opencv-3.4.0-android-sdk) - 简书
  • [1.8] 使用CMake编译NDK | 星家|不会搬砖的码农
  • [1.9] Building OpenCV & OpenCV Extra Modules For Android From Source | You, Myself and Community
  • [1.10] Setup OpenCV and Android Studio with NDK support | Dang-Khoa’s blog
  • [1.11] OpenCV in Android – An Introduction (Part 1/2) | Sri Malireddi
  • [1.12] build opencv3.4.1 android sdk+contrib on windows

2. 相机

  • [2.1] Camera development experience on Android · Hujiawei Bujidao
  • [2.2] Differences between OpenCV JavaCV and OpenCV4Android - 宅男潇涧 - SegmentFault 思否
  • [2.3] Android Ndk and Opencv Development 3 · Hujiawei Bujidao
  • [2.4] OpenCV -Android Studio 中使用(opencv-3.4.0-android-sdk) - 简书
  • [2.5] OpenCV in Android – An Introduction (Part 2/2) | Sri Malireddi
  • [2.6] 使用Android Studio 3.0 (>=2.2)和Cmake (CMakeLists)让OpenCV 3.4 飞起来 - CSDN博客
  • [2.7] OpenCV学习笔记(六)—— OpenCV for Android打开相机 - CSDN博客

3. 其他

  • [3.1] Android Studio NDK CMake 指定so输出路径以及生成多个so的案例与总结 - Android知识库
  • [3.2] Android NDK开发扫盲及最新CMake的编译使用 - 简书
  • [3.3] NDK:Android Studio NDK开发环境 - 简书

Windows 下 OpenCV 3.4.0 + Contrib 部署文档 (VS2015 Android)相关推荐

  1. linux上搭载was应用上传中文文件,受支持的Linux操作系统和WAS ND 9.0安装部署文档的资料说明...

    本文档的主要内容详细介绍的是受支持的Linux操作系统和WAS ND 9.0安装部署文档的资料说明. 从was9.0开始支持的最低版本的red hat Linux系统为6.6且仅支持64位操作系统 计 ...

  2. Oracle RAC 11g R2(11.2.0.4)部署文档

    环境准备: 主机 名称 部署应用 IP 系统盘空间分配 数据存储 空间 系统配置信息 node1 node2 oracle linux  6.7 Oracle11g RAC11.2.0.4 pub:e ...

  3. windows下OpenCV的安装配置部署详细教程

    零.简介 OpenCV的全称是Open Source Computer Vision Library,是一个跨平台的计算机视觉库.OpenCV是由英特尔公司发起并参与开发,以BSD许可证授权发行,可以 ...

  4. Windows下学习Objective-C 2.0

    为什么要在windows下学习objective c 学习一门移动端的语言,为后面的工作做准备 穷,目前买不起Mac.只能在Windows下曲线学习. 如何在Windows下搭建Objective-c ...

  5. python3.7安装步骤-Windows下Python 3.7.0的安装步骤,Python370

    Windows下Python 3.7.0的安装步骤 由于Python版本太新的话,能会出现不稳定的情况,所以在这里,作者建议用版本不太新的Python.在这里,我用的是Python3.7.0版本(其他 ...

  6. Ubuntu下LDAP 部署文档

    LDAP 基本概念 LDAP 部署文档 环境准备 # cat /etc/issue Ubuntu 16.04.6 LTS \n \l # uname -r 4.4.0-142-generic # sl ...

  7. 华为云鲲鹏服务器部署文档--java微服务

    华为云鲲鹏服务器部署文档 河南中电高科计算机技术有限公司 2020.5.9 适用于java微服务技术栈. CentOS 7.6 64bit ISO 适用于鲲鹏服务器arm架构的CentOS 7.6.1 ...

  8. 华为云鲲鹏服务器部署文档-修正版-CentOS+java微服务开发

    华为云鲲鹏服务器部署文档 河南中电高科计算机技术有限公司 http://www.ceht.com.cn 2020.5.12 适用于java微服务开发运行基础软件环境部署,实测通过. CentOS 7. ...

  9. java web部署文档_javaweb项目实施部署文档

    javaweb项目实施部署文档 一 .安装配置jdk Jdk的下载地址: http://www.oracle.com/technetwork/java/javase/downloads/index.h ...

最新文章

  1. anaconda怎么运行python程序-致Python初学者 Anaconda入门使用指南完整版
  2. 【Android 应用开发】Paint 图形组合 Xfermod 之 合成模式表示方法 ( Xfermod 使用步骤 | 透明度 颜色值 公式表示方法 | 老版本表示方法 | 合成区域分块 )
  3. 1.模型 16个相机参数(内参、外参、畸变参数)
  4. mysql innodb学习笔记
  5. python leetcode_python实现leetcode中无重复字符的最长字串
  6. ux设计_声音建议:设计UX声音的快速指南
  7. MySQL学习笔记之五:存储引擎和查询缓存
  8. Python(14)-模块
  9. 基于OPENldap搭建postfix 虚拟用户
  10. 小米员工疑似上手小米11新机:骁龙888首发在即
  11. Myeclipse----Hibernate环境搭建
  12. 调试错误:ValueError: Protocol message Feature has no quot;featurequot; field.
  13. 当前不会命中断点 还没有为该文档加载任何符号
  14. 关联本地项目和svn_技术贴 本地代码与svn关联教程 svn upgrade问题解决
  15. 常用编程语言开发工具
  16. 记忆GRE词汇三大原则
  17. mysql 实现api接口_一套免费MySQL数据库数据接口API,让项目开发更简单
  18. 项目管理:精益管理法
  19. win10系统20H2版本更新以后桌面底下弹出了对话框,说我们在加载你的信息流时遇到了问题?
  20. Mac 中composer的安装

热门文章

  1. java录入个人信息程序_Java:用键盘输入个人信息并输出
  2. [MetalKit]45-Using eGPUs with Metal 在 eGPU上使用 Metal
  3. 安卓应用发布在各大应用市场方法整理
  4. 软件测试原书第二版(佩腾著)-学习笔记(一)
  5. CRMEB全开源Java版微信小程序商城,附源码
  6. c++中opencv对图片旋转镜像并调整尺寸显示
  7. D3学习笔记之常用比例尺
  8. 一文看尽微信AI团队打造扫一扫植物识别利器
  9. 用python打印几种三角形的排列
  10. Google开源的Deep-Learning项目word2vec处理中文