學習筆記:在android 上 使用 opencv
阿新 • • 發佈:2018-12-26
這篇筆記我預料肯定會很長,因為他是我學習了賈老師(賈志剛),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(); } }); } }
該篇文章,只完成了第一個知識點記錄,後面還很長,待完善。。。。