OpenCV是一个开源计算机视觉库,提供各种图像处理和计算机视觉算法。它可以对图像进行处理,检测和跟踪对象,计算流场或图像聚类,并识别人脸等功能。本篇文章将介绍如何使用OpenCV在安卓上进行开发。
一、准备安卓开发环境
在开始OpenCV安卓开发之前,我们需要先安装好Java环境和Android SDK。开发Java程序需要Java Development Kit (JDK),安装JDK后在环境变量中配置JAVA_HOME,将Java路径添加到系统Path里。安装好Android SDK后,在环境变量中配置ANDROID_HOME,将Android SDK路径添加到系统的Path里。
接下来,我们需要下载OpenCV for Android SDK。该SDK提供了OpenCV库的预构建二进制文件及其相应的Java接口,并可以通过Android Studio快速集成到我们的项目中。将下载后的zip文件解压缩到本地目录并重命名为 "openCV"。
现在我们可以开始在Android项目中使用OpenCV库来开发应用程序了。
二、新建Android项目
使用Android Studio创建一个新项目,然后将openCV sdk中的 java 目录拷贝到新建项目的 app/src/main 目录下,即 app/src/main/java 目录下。同时将 opencv sdk 中的 libs 目录拷贝到新建项目的 app/src/main 目录下。
在 app/build.gradle 文件(该文件位于 app 目录下)的 dependencies 块中添加 OpenCV 库文件的依赖:
```
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
compile 'org.opencv:opencv-android:3.4.3'
}
```
编辑 app/src/main/AndroidManifest.xml 文件,添加以下权限:
```
```
添加后我们可以加载OpenCV的Java类库,并使用其中提供的功能。
三、使用OpenCV库
创建一个Activity,该Activity负责加载OpenCV库:
```
public class MainActivity extends AppCompatActivity implements CameraBridgeViewBase.CvCameraViewListener2 {
private static final String TAG = "MainActivity";
private CameraBridgeViewBase mOpenCvCameraView;
private Mat mRgba;
private Mat mGray;
static {
System.loadLibrary("opencv_java3");
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
setContentView(R.layout.activity_main);
mOpenCvCameraView = (CameraBridgeViewBase) findViewById(R.id.camera_view);
mOpenCvCameraView.setCvCameraViewListener(this);
}
@Override
public void onCameraViewStarted(int width, int height) {
mRgba = new Mat(height, width, CvType.CV_8UC4);
mGray = new Mat(height, width, CvType.CV_8UC1);
}
@Override
public void onCameraViewStopped() {
mRgba.release();
mGray.release();
}
@Override
public Mat onCameraFrame(CameraBridgeViewBase.CvCameraViewFrame inputFrame) {
mRgba = inputFrame.rgba();
Imgproc.cvtColor(mRgba, mGray, Imgproc.COLOR_RGBA2GRAY);
return mGray;
}
@Override
protected void onResume() {
super.onResume();
if (!OpenCVLoader.initDebug()) {
Log.d(TAG, "Internal OpenCV library not found. Using OpenCV Manager for initialization");
OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_3_4_0, this, mLoaderCallback);
} else {
Log.d(TAG, "OpenCV library found inside package. Using it!");
mLoaderCallback.onManagerConnected(LoaderCallbackInterface.SUCCESS);
}
}
@Override
protected void onPause() {
super.onPause();
if (mOpenCvCameraView != null) {
mOpenCvCameraView.disableView();
}
}
@Override
protected void onDestroy() {
super.onDestroy();
if (mOpenCvCameraView != null) {
mOpenCvCameraView.disableView();
}
}
private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) {
@Override
public void onManagerConnected(int status) {
switch (status) {
case LoaderCallbackInterface.SUCCESS: {
Log.i(TAG, "OpenCV loaded successfully");
mOpenCvCameraView.enableView();
}
break;
default: {
super.onManagerConnected(status);
}
break;
}
}
};
}
```
这个Activity加载OpenCV库,实现了CameraBridgeViewBase.CvCameraViewListener2接口,从相机读取视频帧。onResume()方法尝试从OpenCV库加载Java接口,如果不能加载Java接口,则使用OpenCV Manager下载和安装OpenCV。onPause()和onDestroy()方法释放OpenCVCameraView对象。onCameraViewStarted()和onCameraViewStopped()方法分配和释放Mat对象。
onCameraFrame()方法读取视频帧,通过Imgproc.cvtColor()方法将图像转换成灰度图像。这个方法处理每帧图像,并返回一个Mat类型的图像数据,当相机关闭时,视图将被释放。
最后,添加OpenCVCameraView控件:
```
android:id="@+id/camera_view" android:layout_width="fill_parent" android:layout_height="fill_parent"/> ``` 我们完成了一个简单的OpenCV安卓应用程序! 总结 本文介绍了如何使用OpenCV在安卓上进行图像处理和计算机视觉的开发。本文提供了一些关键代码和概念,以使您的开发旅程更加轻松。使用OpenCV,您可以对安卓设备上的图像进行快速处理和分析。