目录

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();
}
}
网友评论