OpenCV On Android Studio 配置(不需要安装opencvManager apk)灰度化演示

OpenCV On Android Studio 配置(不需要安装opencvManager apk)灰度化演示

2017年07月06日 16:01:33

阅读数:1087

1.下载好Opencv SDK (注意下载的版本,好像较低版本的不支持不安装Opencv Manager apk,就可以使用,像我之前用的2.4.11的就不支持,同样的配置在3.2.0就可以使用)

下载的链接:http://download.****.net/detail/kangda/9815621

 

2.将Opencv SDK中的java包作为Module导入到项目中

OpenCV On Android Studio 配置(不需要安装opencvManager apk)灰度化演示

OpenCV On Android Studio 配置(不需要安装opencvManager apk)灰度化演示

OpenCV On Android Studio 配置(不需要安装opencvManager apk)灰度化演示

 

 

3.导入之后会出现以下错误(因为还没有进行Gradle 同步)

 

将app目录下的build.gradle文件和openCVLibrary320 module 下的build.gradle以下这几项改成一致(改成和app目录下build.grale文件一样即可)

 

compileSdkVersion

buildToolsVersion

minSdkVersion

targetSdkVersion

 

 OpenCV On Android Studio 配置(不需要安装opencvManager apk)灰度化演示       OpenCV On Android Studio 配置(不需要安装opencvManager apk)灰度化演示    

 

 

然后sync一下。然后 将加入的openCVLibrary Module 加入依赖。

OpenCV On Android Studio 配置(不需要安装opencvManager apk)灰度化演示OpenCV On Android Studio 配置(不需要安装opencvManager apk)灰度化演示

 

OpenCV On Android Studio 配置(不需要安装opencvManager apk)灰度化演示

 

 

4.将Opencv SDK 包下SDK目录下的native文件夹下的lib文件夹复制到app目录下src下的main文件目录下,并改名为jniLibs

 

OpenCV On Android Studio 配置(不需要安装opencvManager apk)灰度化演示

OpenCV On Android Studio 配置(不需要安装opencvManager apk)灰度化演示

 

 

 

5.在需要用到opencv的Activity下 需要进行初始化,用以下代码即可

 
private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) {
    @Override
    public void onManagerConnected(int status) {
        switch (status) {
            case LoaderCallbackInterface.SUCCESS: {
                Log.i(TAG, "OpenCV loaded successfully");
            }
            break;
            default: {
                super.onManagerConnected(status);
            }
            break;
        }
    }
};

@Override
public 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_2_0, this, mLoaderCallback);
    } else {
        Log.d(TAG, "OpenCV library found inside package. Using it!");
        mLoaderCallback.onManagerConnected(LoaderCallbackInterface.SUCCESS);
    }
}
 
 

 

6.在MainActivity上测试一下 查看打印出来的Log 不用manager apk 也能加载成功啦,可以开始使用opencv啦

OpenCV On Android Studio 配置(不需要安装opencvManager apk)灰度化演示

 

 

7.使用opencv的功能 二值化

布局文件:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    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:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.unistrong.yang.opencvfacedetection.MainActivity">


    <ImageView
        android:id="@+id/iv_image"
        android:layout_marginTop="50dp"
        android:layout_centerHorizontal="true"
        android:layout_width="300dp"
        android:layout_height="300dp"
        android:scaleType="centerCrop"/>

    <Button
        android:layout_marginTop="40dp"
        android:layout_below="@+id/iv_image"
        android:layout_centerHorizontal="true"
        android:id="@+id/bt_test"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="灰度化"
        />

</RelativeLayout>

MainActivity:

public class MainActivity extends AppCompatActivity {
    private final String TAG = "MainActivity";
    private ImageView iv_image;
    private Button bt_test;


    private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) {
        @Override
        public void onManagerConnected(int status) {
            switch (status) {
                case LoaderCallbackInterface.SUCCESS: {
                    Log.i(TAG, "OpenCV loaded successfully");
                }
                break;
                default: {
                    super.onManagerConnected(status);
                }
                break;
            }
        }
    };

    @Override
    public 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_2_0, this, mLoaderCallback);
        } else {
            Log.d(TAG, "OpenCV library found inside package. Using it!");
            mLoaderCallback.onManagerConnected(LoaderCallbackInterface.SUCCESS);
        }
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
         iv_image = (ImageView) findViewById(R.id.iv_image);
         bt_test = (Button) findViewById(R.id.bt_test);
         final Bitmap bitmap =((BitmapDrawable)getResources().getDrawable(R.drawable.image)).getBitmap();
         iv_image.setImageBitmap(bitmap);
         bt_test.setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View view) {
                 Bitmap grayBitmap = toGrayByOpencv(bitmap);
                 iv_image.setImageBitmap(grayBitmap);
             }
         });
    }

    /**
     * 灰度化
     * @param srcBitmap
     * @return
     */
    public Bitmap toGrayByOpencv(Bitmap srcBitmap){
        Mat mat = new Mat();
        Utils.bitmapToMat(srcBitmap,mat);
        Mat grayMat = new Mat();
        Imgproc.cvtColor(mat, grayMat, Imgproc.COLOR_BGRA2GRAY, 1);
        Utils.matToBitmap(grayMat,srcBitmap);
        return srcBitmap;
    }


}

 

效果图:

OpenCV On Android Studio 配置(不需要安装opencvManager apk)灰度化演示

 

 

OpenCV On Android Studio 配置(不需要安装opencvManager apk)灰度化演示

 

好啦,opencv的演示程序就到这里啦,opencv是个非常强大的开源库,非常值得我们深入学习。谢谢