六.opencv ndk环境搭建(cmake方式)

opencv全称open source compute vision,开源的视觉库

一.准备工作

导入opencv的步骤还是相对简单,准备步骤分为以下三步:

  1. 下载opencv android sdk https://opencv.org/releases.html
  2. 将OpenCV-android-sdk/sdk/native/libs拷贝到工程的jniLibs
  3. 将OpenCV-android-sdk/sdk/native/jni/include拷贝到src/main/cpp目录(cpp目录不存在就新建一个)

这时候,你的工程目录应该如下图:
在这里插入图片描述

二.建立include和so库的绑定关系,CMakeLists.txt
cmake_minimum_required(VERSION 3.6)
set(CMAKE_VERBOSE_MAKEFILE on)
set(libs "${CMAKE_SOURCE_DIR}/src/main/jniLibs")
add_library(native-lib
        SHARED
        src/main/cpp/Hello.cpp ) #添加.c源文件

include_directories(src/main/cpp/include) #添加头文件的位置

#添加库对象,并设置引用方式
add_library(libopencv_java3 SHARED IMPORTED )
#设置libopencv_java3库的位置
set_target_properties(libopencv_java3 PROPERTIES
        IMPORTED_LOCATION "${libs}/${ANDROID_ABI}/libopencv_java3.so")

target_link_libraries( # Specifies the target library.
        native-lib -ljnigraphics libopencv_java3
        # Links the target library to the log library
        # included in the NDK.
        ${log-lib} )
三.调用opencv的方法

先看MainActivity.java

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        TextView contentTv = findViewById(R.id.tv_content);
        contentTv.setText(getVersion());
    }
    static {
        System.loadLibrary("native-lib");
    }
    public native String getVersion();
}

Hello.h会Include opencv的头文件

#ifndef PRACTICLE_HELLO_H
#define PRACTICLE_HELLO_H

#include <jni.h>
#include <android/bitmap.h>
#include <opencv/cv.h>
#include <opencv2/opencv.hpp>
#include <opencv2/imgproc/imgproc.hpp>
using namespace cv;
extern "C"
JNIEXPORT jstring JNICALL
Java_com_example_a6_1opencv2_MainActivity_getVersion(JNIEnv *env, jobject instance);
#endif //PRACTICLE_HELLO_H

在看Hello.cpp

#include <jni.h>
#include "Hello.h"

#ifdef __cplusplus
extern "C" {
#endif

JNIEXPORT jstring JNICALL
Java_com_example_a6_1opencv2_MainActivity_getVersion(JNIEnv *env, jobject instance) {
    const char *version = CV_VERSION;
    return env->NewStringUTF(version);;
} ;

#ifdef __cplusplus
}
#endif
四.运行结果

在这里插入图片描述

code:https://github.com/HumorSmith/NDKPraticle/tree/master/6_opencv2

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值