博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android Studio-—使用OpenCV的配置方法和demo以及开发过程中遇到的问题解决
阅读量:4322 次
发布时间:2019-06-06

本文共 5151 字,大约阅读时间需要 17 分钟。

前提:

      1.安装Android Studio(过程略)

      2.官网下载OpenCV for Android 网址: 我下载的是下图的版本

    3.将下载好的OpenCV for Android解压到固定文件夹 

    4.新建一个android项目(就新建一个就好,以后用到)

     以上的步骤基本没有什么问题(除了打开网页的时候网速很慢。。。)

Android Studio导入OpenCV:

    1.点击File-new-import Module如图:

     

     2.Source directory中填写内容:找到步骤1中解压OpenCV for Android的位置OpenCV-android-sdk   —>  sdk—>  java直接拷贝,拷贝完毕后会出现Module                     name(我的因为已经导入过了所以会有感叹号正常情况下点击下一步下一步下一步就好)

    

   上述步骤可能会遇见的错误:导入之后各种bug输出,,,,,我的如下图(只是截取的部分):

    

    解决:导入OpenCV for Android后应该将openCVLibrary310下的build.gradle文件改成和第一步自己新建的android项目下的build.gradle文件相同,然后clean一下,OK

将openCVLibrary310应用到自己的项目:

   1.点击File-Project Structure会出现下图:Modules下边找你新建的android项目后点击Dependencies

   

   2.点击右侧加号选第三个Module dependency后选择openCVLibrary310后点击完成

    

   以上完成后你的app就可以使开发openCV了

android使用OpenCV将彩图转化为灰图的例子:

  MainActivity.java代码:

package com.example.lenovo.myapplication;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;import android.view.View;import android.widget.Button;import android.widget.ImageView;import com.example.lenovo.R;import org.opencv.android.BaseLoaderCallback;import org.opencv.android.LoaderCallbackInterface;import org.opencv.android.OpenCVLoader;import org.opencv.android.Utils;import org.opencv.core.Mat;import org.opencv.imgproc.Imgproc;public class MainActivity extends AppCompatActivity {    Button btnProcess;    Bitmap srcBitmap;    Bitmap grayBitmap;    ImageView imgHuaishi;    private static boolean flag = true;    //private static boolean isFirst = true;    private static final String TAG = "MainActivity";    //OpenCV库加载并初始化成功后的回调函数    private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) {        @Override        public void onManagerConnected(int status) {            // TODO Auto-generated method stub            switch (status){                case BaseLoaderCallback.SUCCESS:                    Log.i(TAG, "成功加载");                    break;                default:                    super.onManagerConnected(status);                    Log.i(TAG, "加载失败");                    break;            }        }    };    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        initUI();        btnProcess.setOnClickListener(new ProcessClickListener());    }    public void initUI(){        btnProcess = (Button)findViewById(R.id.btn_gray_process);        imgHuaishi = (ImageView)findViewById(R.id.img_huaishi);        Log.i(TAG, "initUI sucess...");    }    public void procSrc2Gray(){        Mat rgbMat = new Mat();        Mat grayMat = new Mat();        srcBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.text_img);        grayBitmap = Bitmap.createBitmap(srcBitmap.getWidth(), srcBitmap.getHeight(), Bitmap.Config.RGB_565);        Utils.bitmapToMat(srcBitmap, rgbMat);//convert original bitmap to Mat, R G B.        Imgproc.cvtColor(rgbMat, grayMat, Imgproc.COLOR_RGB2GRAY);//rgbMat to gray grayMat        Utils.matToBitmap(grayMat, grayBitmap); //convert mat to bitmap        Log.i(TAG, "procSrc2Gray sucess...");    }    private class ProcessClickListener implements View.OnClickListener {        @Override        public void onClick(View v) {            // TODO Auto-generated method stub//            if(isFirst)//            {                procSrc2Gray();//                isFirst = false;//            }            if(flag){                imgHuaishi.setImageBitmap(grayBitmap);                btnProcess.setText("查看原图");                flag = false;            }            else{                imgHuaishi.setImageBitmap(srcBitmap);                btnProcess.setText("灰度化");                flag = true;            }        }    }    @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_0_0, this, mLoaderCallback);        } else {            Log.d(TAG, "OpenCV library found inside package. Using it!");            mLoaderCallback.onManagerConnected(LoaderCallbackInterface.SUCCESS);        }    }}

  对应的xml文件:

"

     这样就够了,然后点击运行。。。。。

     呵呵,,运行失败对不对,提醒要要安装opencv manager的apk,,我吧官方demo中所有的apk都安装了,还是提示未安装,,程序不能运行,,,后来想想,实际开发中        需要人脸识别一类的功能,还非得让客户用你的软件的同时还非要安装opencv manager的apk?那用户体验也是没谁了。。。。。。然后就找到了一种不安装这个apk也可以照      常使用OpenCV了

     参考网址:

     方法如下:

     1.把OpenCV sdk for Android文件下F:\OpenCV-android-sdk\sdk\native下的libs文件夹拷贝到你的安卓项目下,即自己的项目\src\main下面,并且将libs改名为         jniLibs

     2.将OpenCV-android-sdk\samples\image-manipulations\res\layout下的xml文件拷贝到自己的项目\src\main\res下面

     3.将OpenCV-android-sdk\samples\image-manipulations\src\org\opencv\samples\imagemanipulations下的java文件拷到自己的项目\src\main\java\你                       MainActivity所在的包名,即和MainActivity同级目录

     4.在项目清单文件中为刚才导入的java文件进行配置,加上相应的权限,如图:

       

     接下来运行你的项目,就妥妥的了

     我的运行后截图:

   

   最后说说遇到的其他奇葩问题:

   1.明明哪里都妥妥的了,资源文件没有问题,就是找不到R文件 clean也找不到,,,,

     不择手段的解决方法:手动写 import 你的报名.R 我试了,,OK了。。。。。。。

   2.运行app时候出错如图:

    

    解决如图:Enable ADB Integration勾选一下

   

   备忘,希望给大家带来帮助。

     

 

 

 

   

 

 

转载于:https://www.cnblogs.com/yunfang/p/6149831.html

你可能感兴趣的文章
request和response的知识
查看>>
bootstrap 表单类
查看>>
20165332第四周学习总结
查看>>
Codeforces Round #200 (Div. 1)D. Water Tree dfs序
查看>>
linux安全设置
查看>>
Myflight航班查询系统
查看>>
团队-团队编程项目爬取豆瓣电影top250-代码设计规范
查看>>
【linux驱动分析】之dm9000驱动分析(六):dm9000_init和dm9000_probe的实现
查看>>
json具体解释
查看>>
十一:Java之GUI图形Awt和Swing
查看>>
.net在arraylist用法
查看>>
android程序报错“error launching activity com.android.ddmlib.shellcommandunresponsiveexception”的解决方式...
查看>>
ORACLE中CONSTRAINT的四对属性
查看>>
DbVisualizer Pro 9.5.2中文乱码问题
查看>>
numpy.tile()
查看>>
[bzoj3944] Sum
查看>>
hadoop2.7节点的动态增加与删除
查看>>
Ogre: 天空
查看>>
关于NSDictionary的一点感悟
查看>>
CSS长度单位:px和pt的区别
查看>>