OpenCV4android 配置以及注意点

1.配置的基本步骤

     详细的步骤的可以参考博客:http://blog.csdn.net/Glouds/article/details/39375035
  这里只讲几个关键快速上手的步骤,而且是使用openCV for java封装的函数。
  • 下载好openCV4android
     下载地址是:http://opencv.org/
解压后的一些文件
  • 导入到Eclipse中
将sdk文件夹copy到eclipse workspace文件夹下,然后import进来
 

添加sdk

添加后在导航栏中的状态


  • 将openCV lib 添加到需要使用的工程中
右键工程选择porperties,再选择Android就可看到下面的窗口

添加成功后的文件
  • 使用OpenCV转一个图像灰度转换
<span style="color:#006600;background-color: rgb(255, 255, 255);">package com.example.cvtest;




import android.app.Activity;

import android.graphics.Bitmap;

import android.graphics.BitmapFactory;

import android.os.Bundle;

import android.util.Log;

import android.view.View;

import android.widget.ImageView;




import org.opencv.android.BaseLoaderCallback; 

import org.opencv.android.LoaderCallbackInterface; 

import org.opencv.android.Utils; 

import org.opencv.android.OpenCVLoader;

import org.opencv.core.Mat; 

import org.opencv.imgproc.Imgproc;




public class MainActivity extends Activity

{

       private ImageView imageView ; 

       private Bitmap bmp ; 


      

    private BaseLoaderCallback  mLoaderCallback = new BaseLoaderCallback(this) { 

         @Override 

         public void onManagerConnected(int status) { 

             switch (status ) { 

                 case LoaderCallbackInterface .SUCCESS :{ 

                 } break; 

                 default:{ 

                     super.onManagerConnected (status ); 

                 } break; 

             } 

         } 

     }; 




//    private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) {

//        @Override

//        public void onManagerConnected( int status) {

//            switch (status) {

//                case LoaderCallbackInterface.SUCCESS:

//                {

//                    Log.i("OpenCV", "OpenCV loaded successfully");

//                    imageMat=new Mat();

//                } break;

//                default:

//                {

//                    super.onManagerConnected(status);

//                } break;

//            }

//        }

//    };

      

      

       @Override

       protected void onCreate(Bundle savedInstanceState)

      {

             super.onCreate (savedInstanceState );

             setContentView(R.layout .activity_main );

            

//          if (!OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_11,

//                MainActivity.this, mLoaderCallback)) {

//            Log.e("TEST", "Cannot connect to OpenCV Manager");

//        }

            

             imageView = ( ImageView) findViewById(R.id.iv_image );

             bmp = BitmapFactory.decodeResource (getResources (),R .drawable .lena );

             imageView.setImageBitmap( bmp);




//          

//          if (!OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_2,

//                MainActivity.this, mLoaderCallback)) {

//            Log.e("TEST", "Cannot connect to OpenCV Manager");

//        }

            

      }




      

       public void click(View v)

      {

             Mat rgbMat = new Mat();

             Mat grayMat = new Mat();

            

//          Mat imageMat = new Mat();

            

             Utils. bitmapToMat(bmp, rgbMat );

            

             Imgproc. cvtColor(rgbMat , grayMat ,Imgproc .COLOR_BGR2GRAY );

            

             Utils. matToBitmap(grayMat , bmp );

            

             imageView.setImageBitmap( bmp);




      }

      

      

    @Override 

     public void onResume ()

    { 

         super.onResume (); 

         //通过OpenCV引擎服务加载并初始化OpenCV类库,所谓OpenCV引擎服务即是 

         //OpenCV_2.4.3.2_Manager_2.4_*.apk程序包,存在于OpenCV安装包的 apk目录中 

         OpenCVLoader.initAsync (OpenCVLoader .OPENCV_VERSION_2_4_11 , this, mLoaderCallback ); 

     }




      

}</span>

但是编译的过程中总是出现各种问题,如下:

2.配置的主要的问题

  • 报错信息
java.lang.IllegalArgumentException: Service Intent must be explicit: Intent {act=org.opencv.engine.BIND }

  • 原因分析
    • 这个错误好像是由于Android版本引起,网上也有相关的讨论,说是android5.0更新引起的,但是我试过更爱编译的版本为4.0还是不行
    • 这个可能是是openCv初始化的时候没有初始化,导致的错误

3.解决的方案

  • 最后试了很多种方案,终于找到了正解,需要修改openCV源码:src/main/java/org/opencv/android/AsyncServiceHelper.java

  • 需要将这个改成如下的代码:
public static boolean initOpenCV(String Version, final Context AppContext,
        final LoaderCallbackInterface Callback) {
    AsyncServiceHelper helper = new AsyncServiceHelper(Version, AppContext,
            Callback);
    Intent intent = new Intent("org.opencv.engine.BIND");
    intent.setPackage("org.opencv.engine");
    if (AppContext.bindService(intent, helper.mServiceConnection,
            Context.BIND_AUTO_CREATE)) {
        return true;
    } else {
        AppContext.unbindService(helper.mServiceConnection);
        InstallService(AppContext, Callback);
        return false;
    }
}


终于可以使用了,主要参考如下:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android平台上配置OpenCV和Qt开发环境是一个相对复杂的过程,下面是简要的步骤: 1. 下载OpenCV SDK和Qt开发工具包:首先,从OpenCV官方网站下载合适版本的OpenCV SDK。然后,从Qt官方网站下载适用于Android的Qt开发工具包。 2. 安装和配置Android SDK和NDK:确保已经正确安装和配置Android SDK和NDK,因为Qt和OpenCVAndroid开发都依赖于这两个工具。 3. 创建一个Qt项目:使用Qt Creator创建一个新的Qt项目,并选择适用于Android的项目模板。 4. 配置Qt项目:在Qt项目的.pro文件中添加适当的OpenCV库依赖项,例如: ``` INCLUDEPATH += path_to_opencv_sdk/sdk/native/jni/include LIBS += -Lpath_to_opencv_sdk/sdk/native/libs/$(TARGET_ARCH_ABI) -lopencv_java4 ``` 这些路径和库的名称可能因您下载的OpenCV版本而异。 5. 配置项目的AndroidManifest.xml文件:在项目的AndroidManifest.xml文件中添加相应的权限和特性,以便允许应用程序访问相机等设备功能。 6. 编写Qt代码和OpenCV集成:在Qt项目的源文件中添加OpenCV的相关代码,并进行必要的配置和初始化,以便能够在Android设备上运行OpenCV功能。 7. 构建和部署项目:最后,通过Qt Creator构建和部署项目到Android设备,以进行测试和调试。 需要注意的是,这只是一个简要的概述,并且确切的步骤可能会因您使用的OpenCV版本和Qt版本而有所不同。因此,建议您参考相关的文档、教程和示例代码,以获得更详细和具体的配置说明。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值