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导入到项目中
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是个非常强大的开源库,非常值得我们深入学习。谢谢