一、Android Studio引入OpenCV
1、创建一个新工程 File→New Project→Empty Activity,然后Finish进行创建
![](https://i-blog.csdnimg.cn/direct/b3394a0243a64546a92d532dd3557c38.png)
2、检验工程是否能正常运行,如果正常运行,则跳过此步
3、 下载NDK,集成OpenCV需要用到
4、引入openCv,File→New→Import Module,选择你下载解压之后的OpenCV-android-sdk\sdk(注意解压的文件夹,不要有中文,不要放的太深,避免导入模块出错),然后Finish,此处使用的是opencv-4.5.2-android-sdk,需要的可自取。
链接: https://pan.baidu.com/s/1VufrqPXOzviEy63nZ6pNqQ 提取码: ancv
5、配置引入的OpenCV的配置文件
![](https://i-blog.csdnimg.cn/direct/c3264ee13c5c4173aa0bd6a9923e039b.png)
6、把引入的OpenCV包添加到app项目里,打开导包界面,File→Project Struture,然后按照下面的步骤导包,最后apply即可
7、添加OpenCV的.so动态链接库文件。在你解压的OpenCV文件中,进入到OpenCV-android-sdk\sdk\native\libs文件夹下
8、在app的gradle配置文件中,加入如下的声明,定义引入的OpenCV的.so动态链接库文件,然后sync now,同步一下
9、最后,启动项目看配置是否成功,如若成功,则有如下提示
二、实例演示
1、代码实现,activity_main.xml代码
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<Button
android:id="@+id/button"
android:text="灰度化"
android:layout_width="match_parent"
android:layout_height="wrap_content">
</Button>
<ImageView
android:id="@+id/image"
android:layout_width="match_parent"
android:layout_height="wrap_content">
</ImageView>
</LinearLayout>
2、activity_main.java代码
import androidx.appcompat.app.AppCompatActivity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import org.opencv.android.OpenCVLoader;
import org.opencv.android.Utils;
import org.opencv.core.CvType;
import org.opencv.core.Mat;
import org.opencv.imgproc.Imgproc;
public class MainActivity extends AppCompatActivity {
private Button garyButton; // 灰度化启动按钮
private Bitmap oriBitmap, garyBitmap; // oriBitmap:原图;garyBitmap:灰度化图
private ImageView imageView;// 图片组件
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 导入视图文件
imageView = findViewById(R.id.image);
oriBitmap = BitmapFactory.decodeResource(this.getResources(), R.drawable.yaya);
imageView.setImageBitmap(oriBitmap);
// 按钮监听事件
garyButton = findViewById(R.id.button);
garyButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// 实现图片灰度化
garyImage(oriBitmap);
}
});
}
/**
* 实现图片灰度化
*
* @param bitmap 位图
*/
protected void garyImage(Bitmap bitmap) {
Mat mat = new Mat(bitmap.getHeight(), bitmap.getWidth(), CvType.CV_8UC3);
Utils.bitmapToMat(bitmap, mat);
garyBitmap = Bitmap.createBitmap(mat.width(), mat.height(), Bitmap.Config.ARGB_8888);
Imgproc.cvtColor(mat, mat, Imgproc.COLOR_BGR2GRAY);
Utils.matToBitmap(mat, garyBitmap);
imageView.setImageBitmap(garyBitmap);
}
protected void onResume() {
super.onResume();
if (!OpenCVLoader.initDebug()) {
Log.d("openCv", "openCv加载失败...");
}else {
Log.d("openCv", "openCv加载成功...");
}
}
}
3、实现效果
![原图](https://i-blog.csdnimg.cn/direct/a460fe2678d64708a1ee732e5218b438.png)
![](https://i-blog.csdnimg.cn/direct/9cbea007efb2411f8508d83d3fe468b0.png)
三、 总结:
翻阅了大量资料,耗费了很多时间才自我集成成功,故有感而发,希望本博文能帮助想要使用android studio集成OpenCV的朋友,减少集成的时间。如博文哪里有问题,希望各位大佬斧正。