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

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

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

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





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

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

compileSdkVersion
buildToolsVersion
minSdkVersion
targetSdkVersion

            


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





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




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啦



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的演示程序就到这里啦,opencv是个非常强大的开源库,非常值得我们深入学习。谢谢
  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值