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

来源:互联网 发布:seo和sem有什么区别 编辑:程序博客网 时间:2024/06/06 05:27

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;        }    }};@Overridepublic 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是个非常强大的开源库,非常值得我们深入学习。谢谢
阅读全文
0 0
原创粉丝点击