⼿把⼿教学OpenCV-android-sdk配置以及使⽤,学不会算我输
OpenCV是Open Source Computer Vision Library 缩写, 主要由Intel公司的⼀些⼤佬写的, 功能是提供⼤量的图形图形处理(计算机视觉)的库, 并且提供 iOS 和 Android 的 SDK, 由于我主要⼯作是和Camera以及算法集成有关, 所以经常会⽤到这个⼯具, 在此记录下 Android 端的 SDK 使⽤和配置
OpenCV-android-sdk下载
导⼊Java SDK到Android Studio
1. 打开Android Studio后新建⼀个项⽬ OpencvDemo,建好后, 依次点击
File --> New --> Import Module , 如图所⽰:
2. 在打开的窗⼝中选择Opencv-android-sdk⽂件夹下⾯的sdk⽬录, 如图所⽰:
将Module name 命名为 opencvSdk, 点击 Finish.
3. 导⼊过程中 Android Studio 会提⽰ Manifest 中 sdkVersion 设置的错误, 我们需要直接删除 opencvSdk 中
4. 将opencvSdk中 adle 关于android sdk 的相关设置改为和当前项⽬相同, 只需修改 compileSdkVersion minSdkVersion
和 targeSdkVersion, 如果所⽰:
5. 改完后重新编译⼀下, OpenCV 导⼊就⼤功告成了, 接下来是在我们⾃⼰的项⽬中进⾏使⽤.
使⽤Opencv中的⾼斯模糊
接下来我们写个 Demo 来使⽤ OpenCV 中的⾼斯模糊, ⾸先在我们项⽬的中添加我们导⼊的 opencvSdk 作为依赖, 在 adle 中加⼊ implementation project(':opencvSdk') 如图所⽰:
编写 Demo, 做法是⼀个 ImageView 显⽰清晰的图⽚, 点击 Button 后将图⽚进⾏⾼斯模糊, 并重新显⽰出来, ⾼斯模糊使⽤代码如下:
import org.opencv.android.Utils;
import Mat;
import Size;
import org.opencv.imgproc.Imgproc;
//部分代码省略
public class MainActivity extends AppCompatActivity {
private ImageView mImageView;
// opencv相关功能实现所需要的so库
static {
System.loadLibrary("opencv_java3");
}
@Override
protected void onCreate(Bundle savedInstanceState) {
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(lbar);
setSupportActionBar(toolbar);
mImageView = findViewById(R.id.iv_image);
final Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.ic_bg);        mImageView.setImageBitmap(bitmap);
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
blurImage(bitmap);
mImageView.setImageBitmap(bitmap);
}
});androidsdk安装步骤
}
//传⼊任意bitmap, 返回模糊过后的bitmap
private Bitmap blurImage(Bitmap origin) {
Mat mat = new Mat();
Utils.bitmapToMat(origin, mat);
Imgproc.GaussianBlur(mat, mat, new Size(15, 15), 0);
Utils.matToBitmap(mat, origin);
return origin;
}
}
重复点击 Button 可让图⽚越来越模糊, 效果图⽚:
说明
从上⾯ Demo 中可以看到, 调⽤了 System.loadLibrary("opencv_java3");, 其实 OpenCV 核⼼功能都是通过C++实现的, android sdk 基本上就是封装了 JNI 的调⽤, 所以运⾏时候必须加载核⼼库 libopencv_java3.so, so库的位置为 OpenCV-android-sdk\sdk\native\libs, 此⽬录下有多个 CPU 架构的算法库, 上⾯ Demo 默认将所有的库都打包到 apk 中了, 编译完后 apk 体积会有 80M 左右, 但正常情况我们只需要 armeabi-v7a 和 arm64-v8a 这两个⽬录的库, 因为现在⼿机端⼏乎所有 CPU 都是 ARM 架构的.
关于OpencvManager, OpencvManager 是官⽅推出的⼀个App, OpencvManager 是⼀个单独的app, 安装后, 我们就不需要将libopencv_java3.so 打包到我们的 apk 中了, 只需通过 OpenCVLoader.initAsync() ⽅法进⾏初始化即可, 相当于将相关算法库单独打包到了另⼀个 App 中, 这样能减⼩ apk 体积, 但这种⽅法其实⾮常不实⽤, 因此很少有⼈使⽤.
从上⾯使⽤ OpenCV Java 的 SDK 可以看出来, 使⽤起来⾮常简单, 但最⼤的问题是会增⼤ apk 体积, 由于我们只使⽤其中部分功能, 却要将整个算法库都打包到 apk 中, 有没有其他⽅式能减⼩ apk 体积呢?
答案是肯定的, 下篇⽂章中我将会讲解如何不使⽤Java SDK 通过 JNI 调⽤ OpenCV SDK, 并最⼤程度
减⼩ apk 占⽤体积.
备注: 测试环境 Android Studio 3.2.1 compileSdkVersion 28 Android 8.1
⽂章不易,如果⼤家喜欢这篇⽂章,或者对你有帮助希望⼤家多多点赞转发关注哦。⽂章会持续更新的。绝对⼲货

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。