opencv篇(一) ndk运行环境搭建

9 篇文章 1 订阅
6 篇文章 0 订阅

        因公司业务需求,需要涉及到计算机视觉的内容,出于增强记忆和乐于分享的目的,在此记录下本技术完整流程!

首先,亮一下本屌的开发工具启动界面,本篇就算正式开始了!

一、android studio配置

1.首先创建一个没有什么卵用的空项目

2.首先确保,你的android studio中安装了sdk 和ndk 以及cmake

3.按住快捷键Ctrl+Shift+Alt+S,检查NDK是否配置成功

4.然后去opencv官网下载(这里我使用的版本是3.4.6,各位随意,大同小异):https://opencv.org/releases/page/2/

把windows和android版本都下载下来,windows版本后面有用,做重点讲解

两种都下载完成后,为以下内容

解压zip

复制../OpenCV-android-sdk/sdk/native/libs/libopencv_java3.so到项目下../opencvdemo/app/src/main/jniLibs/armeabi-v7a/

复制../OpenCV-android-sdk/sdk/native/jni/include下文件夹到项目下../opencvdemo/app/src/main/cpp/include/

在项目../opencvdemo/app/下创建文件CMakeLists.txt,加入如下代码:

cmake_minimum_required(VERSION 3.4.1)

add_library(
           native-lib
           SHARED
           src/main/cpp/native-lib.cpp)

include_directories(src/main/cpp/include)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -L${CMAKE_SOURCE_DIR}/src/main/jniLibs/${ANDROID_ABI}")

target_link_libraries( native-lib log opencv_java3 android )

在项目../opencvdemo/app/build.gradle文件中,配置如下

android {
    ....

    defaultConfig {
        ....

        externalNativeBuild {
            cmake {
                cppFlags ""
                abiFilters "armeabi-v7a"
                arguments '-DANDROID_STL=gnustl_static'
            }
        }

        ndk {
            abiFilters 'armeabi-v7a'
        }
    }


    externalNativeBuild {
        cmake {
            path "CMakeLists.txt"
        }
    }
}

在项目../opencvdemo/app/src/main/cpp/下创建cpp文件,取名native-lib.cpp,加入如下代码

#include <jni.h>
#include <opencv2/opencv.hpp>
#include <android/native_window_jni.h>


extern "C"
JNIEXPORT void JNICALL
Java_com_liera_opencvdemo_MainActivity_matSource(JNIEnv *env, jobject instance) {

}

到此,opencv配置基本结束,下一章节我们讲如何配置windows的opencv环境。(注:因毕竟android上开发opencv实时预览不太方便,所以我们采用在windows上开发运行项目,运行调试通过后一并移植到android项目中)。

 

补充:

使用NDK 18rc以上的NDK编译带OpenCV的工程时会遇到编译问题。

android undefined reference to 'std::basic_ostream<char, std::char_traits<char> >

有两种解决办法:

(1)在gradle中加入如下代码,这只对NDK 18rc以下的版本有效

externalNativeBuild {
    cmake {
        cppFlags "-std=c++11"
        arguments "-DANDROID_STL=gnustl_static"
    }
}

(2)对NDK 18rc以上的版本,gnustl_static已经不再支持,只能重新编译OpenCV

cd $OPENCV_SRC
mkdir build
cd build
cmake .. -DCMAKE_TOOLCHAIN_FILE=$ANDROID_DIR/ndk-bundle/build/cmake/android.toolchain.cmake -DANDROID_ABI="arm64-v8a" -DANDROID_STL=c++_static  -DCMAKE_BUILD_TYPE=Release -DANDROID_NATIVE_API_LEVEL=android-24 
make install
cd install #the sdk will be here...

 

本章完。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值