OpenCV是Open Source Computer Vision Library 缩写, 主要由Intel公司的一些大佬写的, 功能是提供大量的图形图形处理(计算机视觉)的库, 并且提供 iOS 和 Android 的 SDK, 由于我主要工作是和Camera以及算法集成有关, 所以经常会用到这个工具, 在此记录下 Android 端的 SDK 使用和配置
OpenCV-android-sdk下载
下载地址(官网):
https://opencv.org/releases.html
最新的版本是4.0.0 beta, 我们下载稳定版本3.4.3, 直接点击Android pack进行下载, 下载后解压即可.
导入Java SDK到Android Studio
File --> New --> Import Module , 如图所示:
编写 Demo, 做法是一个 ImageView 显示清晰的图片, 点击 Button 后将图片进行高斯模糊, 并重新显示出来, 高斯模糊使用代码如下:
import org.opencv.android.Utils;
import org.opencv.core.Mat;
import org.opencv.core.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) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
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);
//传入任意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 架构的.