Android中使用OpenCV
Posted gao_chun
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android中使用OpenCV相关的知识,希望对你有一定的参考价值。
转载请注明gao_chun的Blog:http://blog.csdn.net/gao_chun/article/details/72654286
android中使用OpenCV
之前比较早的时候写了一篇博文: AndroidStudio中配置及使用OpenCV示例 ,主要介绍了如何在AS中使用OpenCV,基本的配置介绍及使用示例,上传的示例也比较潦草,使用的版本是 OPENCV_VERSION_2_4_9 ,各个版本号在OpenCV的SDK包中是可以看到的:
OpenCV-android-sdk\\sdk\\java\\src\\org\\opencv\\android\\OpenCVLoader.java
package org.opencv.android;
import android.content.Context;
/**
* Helper class provides common initialization methods for OpenCV library.
*/
public class OpenCVLoader
/**
* OpenCV Library version 2.4.2.
*/
public static final String OPENCV_VERSION_2_4_2 = "2.4.2";
/**
* OpenCV Library version 2.4.3.
*/
public static final String OPENCV_VERSION_2_4_3 = "2.4.3";
/**
* OpenCV Library version 2.4.4.
*/
public static final String OPENCV_VERSION_2_4_4 = "2.4.4";
/**
* OpenCV Library version 2.4.5.
*/
public static final String OPENCV_VERSION_2_4_5 = "2.4.5";
/**
* OpenCV Library version 2.4.6.
*/
public static final String OPENCV_VERSION_2_4_6 = "2.4.6";
/**
* OpenCV Library version 2.4.7.
*/
public static final String OPENCV_VERSION_2_4_7 = "2.4.7";
/**
* OpenCV Library version 2.4.8.
*/
public static final String OPENCV_VERSION_2_4_8 = "2.4.8";
/**
* OpenCV Library version 2.4.9.
*/
public static final String OPENCV_VERSION_2_4_9 = "2.4.9";
/**
* OpenCV Library version 2.4.10.
*/
public static final String OPENCV_VERSION_2_4_10 = "2.4.10";
/**
* OpenCV Library version 2.4.11.
*/
public static final String OPENCV_VERSION_2_4_11 = "2.4.11";
/**
* OpenCV Library version 2.4.12.
*/
public static final String OPENCV_VERSION_2_4_12 = "2.4.12";
/**
* OpenCV Library version 2.4.13.
*/
public static final String OPENCV_VERSION_2_4_13 = "2.4.13";
/**
* OpenCV Library version 3.0.0.
*/
public static final String OPENCV_VERSION_3_0_0 = "3.0.0";
/**
* OpenCV Library version 3.1.0.
*/
public static final String OPENCV_VERSION_3_1_0 = "3.1.0";
/**
* OpenCV Library version 3.2.0.
*/
public static final String OPENCV_VERSION_3_2_0 = "3.2.0";
.....
由于之前使用的OpenCV版本比较老,并且随着手机配置的增强,处理器越来越牛逼,Android的版本也在不断的更新,在配置过程中很多朋友留言说报出来各种乱七八糟的问题,不知道如何去处理,而且折腾了半天配置完还运行不起来,内心一万头草泥马~,所以我抽时间又整理了下,示例这次上传完整的,不管多大。
OpenCV介绍
OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows、Android和Mac OS操作系统上。这里你只需要知道它是一个视觉库就可以了,更加详细介绍可以去查阅相关资料。
OpenCV官网:http://opencv.org/,目前最新版本是3.2,下载链接:
Android:https://nchc.dl.sourceforge.net/project/opencvlibrary/opencv-android/3.2.0/opencv-3.2.0-android-sdk.zip
iOS:https://nchc.dl.sourceforge.net/project/opencvlibrary/opencv-ios/3.2.0/opencv-3.2.0-ios-framework.zip
GitHub下载:https://github.com/opencv/opencv/releases/tag/3.2.0
在之前那篇文章的基础上,我们就更换一下OpenCV的版本还有总结下之前问题的出现及解决方案。
我在下载了之前的旧版本示例后,尝试将新的3.2版本的 native—>Libs—>每个目录中的 libopencv_java3.so 复制到项目中时,很糟糕,出现了如下问题:
程序闪退,我或许不该这么干,因为从2.4.9到3.2.0也许更新了太多的东西,他们库里的方法或许是不能兼容的,这时,我还是乖乖按照 第一篇文章 中的方式将sdk —> java —> src下的代码Copy到项目中,OK,直接Run了一下看会不会成功,结果也很糟糕,报错信息如下:
这次比上次要好有点,起码它告诉我这条信息: dlopen failed: “/data/app/org.opencv.engine-1/lib/arm/libopencv_java3.so” is 32-bit instead of 64-bit
而且在手机中运行程序的提示信息:
Google一番之后,发现问题和使用的targetSDKVersion版本有关,也就是手机系统的版本,5.0? 6.0?Ok,那这个问题就引刃而解了。错误解决方案:
libopencv_java3.so is 64-bit instead of 32-bit Android/Eclipse error
Android 6.0: Load 32-bit OpenCV library on 64-bit arch
Error Opencv4Android: Caused by: java.lang.IllegalArgumentException: Service Intent must be explicit
OpenCV Service Intent must be explicit, Android 5.0 Lolipop
也就是在Activity的onResume()方法中初始化OpenCV时,加入了一个判断,OpenCVLoader.initDebug() 可以跟踪进去看看代码。
若需要 OpenCV Manager支持可以到APP应用市场下载,这里我已经一并上传至项目apk目录下了,安装后的界面:
项目配置:
测试机360 N4
系统版本6.0
OpenCV版本3.2.0
targetSdkVersion 25
GitHub:https://github.com/gaochunchun/OpenCV-Demo
以上是关于Android中使用OpenCV的主要内容,如果未能解决你的问题,请参考以下文章
使用OpenCV Android SDK从摄像头帧实时检测人脸
Opencv 图像识别Android实战(识别扑克牌 4.图像识别扫盲)
怎样在eclipse中加载opencv for android