作為一款開源的計算機視覺庫,OpenCV被廣泛應用於圖像處理、視頻分析、目標檢測、機器學習等領域。而Android Studio作為一款強大、易學易用的開發工具,與OpenCV的結合也十分便捷。本文將詳細闡述如何在Android Studio上集成OpenCV,並展示一些常見的OpenCV應用,包括圖像處理、目標檢測等。
一、集成OpenCV
在Android Studio中使用OpenCV,首先需要進行OpenCV的集成。具體步驟如下:
1、下載OpenCV Android SDK
訪問OpenCV官方網站(https://opencv.org/releases/)下載最新的OpenCV Android SDK,下載完成後將其解壓到合適的目錄。
2、創建Android Studio項目
打開Android Studio創建一個新的Android項目,可以選擇空白活動或者任意其他創建方式。
3、在項目中導入OpenCV庫文件
打開新建項目,在Gradle Scripts下的build.gradle(Module:app)中添加以下代碼:
android {
...
defaultConfig {
...
ndk {
moduleName "MyOpenCVLibs"
cFlags "-std=c++11 -fexceptions"
ldLibs "log", "OpenCV_320"
}
}
}
repositories {
flatDir {
dirs 'libs'
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
}
並將下載的OpenCV Android SDK中的以下文件複製到app/libs目錄下:
opencv-3.4.5-android-sdk/OpenCV-android-sdk/sdk/native/libs/arm64-v8a/libopencv_java3.so
opencv-3.4.5-android-sdk/OpenCV-android-sdk/sdk/native/libs/armeabi-v7a/libopencv_java3.so
opencv-3.4.5-android-sdk/OpenCV-android-sdk/sdk/native/libs/x86/libopencv_java3.so
opencv-3.4.5-android-sdk/OpenCV-android-sdk/sdk/native/libs/x86_64/libopencv_java3.so
然後修改jniLibs.useLegacyPackaging = true,使得libopencv_java3.so文件能夠被打包進apk中。
二、OpenCV基礎應用
1、圖像處理
OpenCV提供了數百種圖像處理算法,可以為我們的Android應用增加強大的圖像處理能力。其中,常用的圖像處理算法包括濾波器、形態學操作、邊緣檢測和特徵檢測等。
以下是一個以灰度圖為基礎進行噪點處理和模糊處理的實例:
// 加載圖像
Mat img = Imgcodecs.imread(imagePath);
// 轉換為灰度圖
Mat grayImg = new Mat();
Imgproc.cvtColor(img, grayImg, Imgproc.COLOR_BGR2GRAY);
// 高斯模糊處理
Mat blurImg = new Mat();
Imgproc.GaussianBlur(grayImg, blurImg, new Size(3, 3), 0);
// 高斯噪聲處理
Mat noiseImg = new Mat(blurImg.size(), blurImg.type());
Mat noise = new Mat(blurImg.size(), blurImg.type());
Imgproc.randn(noise, new Scalar(0), new Scalar(20));
Core.add(blurImg, noise, noiseImg);
// 顯示結果
Utils.matToBitmap(noiseImg, bitmap);
imageView.setImageBitmap(bitmap);
以上代碼中,Imgcodecs是OpenCV提供的圖像讀取/寫入庫,Imgproc是OpenCV提供的基本圖像處理庫,Utils是OpenCV提供的圖像轉換庫。
2、目標檢測
OpenCV的目標檢測算法可以更好地幫助我們在視覺領域應用。常見的目標檢測算法有物體檢測、人臉檢測、動作檢測等。
以下是一個人臉檢測的實例:
// 加載級聯分類器文件
CascadeClassifier faceDetector = new CascadeClassifier(cascadePath);
// 讀入圖像
Mat img = Imgcodecs.imread(imagePath);
// 轉換為灰度圖
Mat grayImg = new Mat();
Imgproc.cvtColor(img, grayImg, Imgproc.COLOR_BGR2GRAY);
// 檢測人臉
MatOfRect faceDetections = new MatOfRect();
faceDetector.detectMultiScale(grayImg, faceDetections);
// 在圖像中繪製人臉框
for (Rect rect : faceDetections.toArray()) {
Imgproc.rectangle(img, new Point(rect.x, rect.y),
new Point(rect.x + rect.width, rect.y + rect.height),
new Scalar(0, 255, 0), 2);
}
// 顯示結果
Utils.matToBitmap(img, bitmap);
imageView.setImageBitmap(bitmap);
以上代碼中,CascadeClassifier是OpenCV提供的級聯分類器庫,用於訓
結論
本文基於Android Studio和OpenCV的結合,介紹了如何集成OpenCV以及在Android應用中使用OpenCV的圖像處理和目標檢測算法。通過這些例子,讀者可以更好地了解並使用OpenCV,增強自己在計算機視覺領域的應用能力。
原創文章,作者:IUNQR,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/370527.html