目錄
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完成簡單的圖像灰度轉化。
效果展示:
代碼展示-布局文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.itfitness.opencvdemo.one.OneActivity">
<Button
android:id="@+id/bt"
android:text="灰度圖"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<ImageView
android:id="@+id/img"
android:layout_width="200dp"
android:layout_height="200dp" />
</LinearLayout>
代碼展示-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();
}
}