Android NDK开发:OpenCV Android JNI库集成

目录

OpenCV是什么

OpenCV(Open Source Computer Vision Library)中文全称是源代码开放的计算机视觉库,是基于C/C++编写的,是BSD开源许可的计算机视觉开发框架。

OpenCV能做什么

OpenCV应用的领域非常广,如卫星地图与电子地图拼接,医学图像噪声处理、对象检测,安防领域的入侵检测,机器人及无人驾驶技术等。

OpenCV的核心功能模块

这里以OpenCV3.3为例,它的正式版核心模块有如下几个:

  • 二维与三维特征工具箱
  • 运动估算
  • 人脸识别
  • 姿势识别
  • 人机交互
  • 运动理解
  • 对象检测
  • 移动机器人
  • 分割与识别
  • 视频分析
  • 运动跟踪
  • 图形处理
  • 机器学习
  • 深度神经网络

OpenCV Android SDK下载

OpenCV Android SDK 下载地址:https://opencv.org/opencv-3-3/

OpenCV Android项目集成

在新建好的项目中导入OpenCV的Java库。



导入的是sdk目录下的Java文件夹。



接下来需要将sdk->native->libs里的所有文件拷贝到app的libs目录下。

然后将以.a结尾的文件删掉。



接下来需要在app的build.gradle问价中加入如下代码:
task nativeLibsToJar(type: Jar, description: "create a jar archive of the native libs") {
        destinationDir file("$buildDir/native-libs")
        baseName "native-libs"
        extension "jar"
        from fileTree(dir: "libs", include: "**/*.so")
        into "lib"
    }

    tasks.withType(JavaCompile) {
        compileTask -> compileTask.dependsOn(nativeLibsToJar)
    }
}
implementation fileTree(dir: "$buildDir/native-libs", include: 'native-libs.jar')

代码测试

我们调用一下OpenCV的相关API完成简单的图像灰度转化。
效果展示:



代码展示-布局文件:




    

代码展示-Activity:

public class OneActivity extends AppCompatActivity implements View.OnClickListener{
    private Button bt;
    private ImageView img;
    private Bitmap bitmap;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_one);
        initOpenCv();
        bt = (Button) findViewById(R.id.bt);
        img = (ImageView) findViewById(R.id.img);
        bt.setOnClickListener(this);
        initImg();
    }

    /**
     * 加载OpenCv库
     */
    private void initOpenCv() {
        boolean b = OpenCVLoader.initDebug();
        if(b){
            Toast.makeText(this, "加载成功", Toast.LENGTH_SHORT).show();
        }
    }

    private void initImg() {
        bitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher);
        img.setImageBitmap(bitmap);
    }

    @Override
    public void onClick(View v) {
        Mat src = new Mat();
        Mat dst = new Mat();
        Utils.bitmapToMat(bitmap,src);
        Imgproc.cvtColor(src,dst,Imgproc.COLOR_BGRA2GRAY);
        Utils.matToBitmap(dst,bitmap);
        img.setImageBitmap(bitmap);
        src.release();
        dst.release();
    }
}

项目源码:https://github.com/myml666/OpenCvDemo

你可能感兴趣的:(Android NDK开发:OpenCV Android JNI库集成)