一、Android Studio引入OpenCV
1、创建一个新工程 File→New Project→Empty Activity,然后Finish进行创建
创建工程 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的设置文件
同步完成后,有报错不消理会,关闭即可 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、实现结果
原图 转换之后图片
三、 总结:
翻阅了大量资料,耗费了很多时间才自我集成乐成,故有感而发,盼望本博文能帮助想要使用android studio集成OpenCV的朋侪,减少集成的时间。如博文哪里有题目,盼望各位大佬斧正。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |