学习笔记:在android 上 使用 opencv

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zr940326/article/details/84644810

这篇笔记我预料肯定会很长,因为他是我学习了贾老师(贾志刚),OpenCV android 开发实战的记录笔记,因为怕后面难得找所以肯定会尽量累积在一篇,或者二篇文章。

今天看到一句话,我认为我以后得学习,就应该以他为标准,这是来自李沫《动手学深度学习》中得一句话:计算机科学是一门动手的科学,没有足够的动手能力难以取得很好的成就,如果算法能力对应一台机器的内存大小,动手能力则是机器的CPU的频率,内存决定了能跑多么复杂的程序,CPU则决定你能多快的完成它,两者都不能缺。

深度学习图片识别方向,少不了对图片处理进行打交道,而opencv是比较常用得,我也是在看贾老师得python学习opencv中了解到贾老师出得这本书,本身现在是在做android,作为技术得纵向发展,这是我必须进修得一门课,所以就有了这篇笔记得记录,对后面做图片领域应该有所帮助。

##1. OpenCv 在android上得 环境搭建

@@1. 下载 sdk 

官方地址 :https://opencv.org/opencv-4-0-0.html ,大约压缩包有300多M,解压有900多M。

将其解压,解压之后的文件结构:

 

@@2.自行安装 jdk ,android 开发环境,android NDK 开发环境。

@@3.android 项目上 使用

 

task nativeLibsToJar(type: Jar, description: "create a jar archive of the native libs") {
        destinationDir file("$buildDir/native-libs")
        baseName "native-libs"
        from fileTree(dir: "libs", include: "**/*.so")
        into "lib/"
    }

    tasks.withType(JavaCompile) {
        compileTask -> compileTask.dependsOn(nativeLibsToJar)


    }
//3.0 之前的
compile fileTree(dir: "$buildDir/native-libs", include: "native-libs.jar") 

//3.0 之后的
implementation  fileTree(dir: "$buildDir/native-libs", include: "native-libs.jar") 

@@4.添加lib,到app,写测试运行代码

package com.zhangrong.opencvdemo;

import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;

import org.opencv.android.OpenCVLoader;
import org.opencv.android.Utils;
import org.opencv.core.Mat;
import org.opencv.imgproc.Imgproc;


/**
 * Created by zhangrong on 2018/10/31.
 * <p>
 * 代码测试页面
 */

public class CodeTestActivity extends Activity {

    private ImageView iv_show;//显示图片控件
    private Button bt_fdOp;//操作按钮

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.act_codetest_layout);
        initLoadOpenCv();
    }

    //加载OpenCv本地库
    private void initLoadOpenCv() {
        boolean successBol = OpenCVLoader.initDebug();
        if (successBol) {
            Log.i("CodeTest", "加载 OpenCv本地库成功");
        } else {
            Log.i("CodeTest", "加载 OpenCv本地库失败");
            Toast.makeText(this, "加载 OpenCv本地库失败", Toast.LENGTH_SHORT).show();
        }

        iv_show = this.findViewById(R.id.show_iv);
        bt_fdOp = findViewById(R.id.bt_fdOp);
        bt_fdOp.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.test);
                Mat src = new Mat();
                Mat dst = new Mat();
                Utils.bitmapToMat(bitmap, src);
                Imgproc.cvtColor(src, dst, Imgproc.COLOR_BGR2GRAY);
                Utils.matToBitmap(dst, bitmap);
                iv_show.setImageBitmap(bitmap);

                //释放操作
                src.release();
                dst.release();
            }
        });




    }


}

 该篇文章,只完成了第一个知识点记录,后面还很长,待完善。。。。

猜你喜欢

转载自blog.csdn.net/zr940326/article/details/84644810