版权声明:本文为博主原创文章,未经博主允许不得转载。 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();
}
});
}
}
该篇文章,只完成了第一个知识点记录,后面还很长,待完善。。。。