• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Android > Android 接入 OpenCV库的三种方式,androidopencv

Android 接入 OpenCV库的三种方式,androidopencv

作者:网友 字体:[增加 减小] 来源:互联网 时间:2017-05-26

网友通过本文主要向大家介绍了opencv android,opencv for android,android使用opencv,android 调用opencv,android opencv教程等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

Android 接入 OpenCV库的三种方式,androidopencv


       OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows、Android和Mac OS操作系统上。它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。          我们利用它来做一些图片的处理,能大大的优化内存的处理。下面我来说说接下OpenCV 的三种方式:   一、接入OpenCV 的Java SDK 包,这样你可以直接在Java调用OpenCV 的大部分方法。第一种方式适用于对Opencv c++ 不熟悉的童鞋,不需要直接调用C++方案, 因为SDK 已经用JNI 全部封装好了。假设你已经安装好JDK、AndroidStudio与NDK环境。          先到官网http://opencv.org/releases.html ,下载Android 包,如:opencv-3.2.0-android-sdk.zip。   sdk 目录提供了Android的API与Java 库 sdk/java 目录包含了一个 Eclipse 项目,该项目提供 OpenCV 的Java API,且可以导入到开发环境里。 sdk/native 目录包含了OpenCV C++ 头文件(用于JNI),与Android的 .so动态库 .a静态库。 sdk/etc 目录包含了Haar 与 LBP cascades 级联。 apk  目录包含了用户安装在指定的Android设备的安装文件,该文件使opencv 库可以管理opencv API   首先: File > New > New Module   然后:选择Import Eclipse ADT Project   把sdk/java 下的项目导入到项目里,然后把这个modules 添加到 app modules里, 直接在 app 目录下build.gradle 文件里dependencies 大括号下添加: compile project(':openCVLibrary')   接着在 app/src/main 目录下 创建一个jniLibs 目录,然后把sdk/native/libs 下所有文件 拷贝到jniLibs下,编译,运行。   如果导入后,出现一些android 自带的类识别不了,那就是因为编译的SDK版本出错了。 打开 刚导入 的模块下 build.gradle 文件,把 compileSdkVersion 与 targetSdkVersion修改成你最新的SDK版本,如:  
apply plugin: 'com.android.library'

android {
    compileSdkVersion 25
    buildToolsVersion "25.0.0"

    defaultConfig {
        minSdkVersion 15
        targetSdkVersion 25
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
        }
    }
}
运行,则成功了,我发现似乎不需要再安装额外的 opencv 的apk 了。 下面链接是我添加成功的例子:  https://github.com/xiaoxiaoqingyi/NDKDemos     OpenCV_java 项目   二、使用opencv sdk 提供的 C++ 头文件与 .so动态库 与 .a静态库,自己封装jni,这样使用的效率会比第一种方法高一些, 且可以100%使用opencv 的接口。下面看一下安装的方式:         用AndroidStudio 创建一个项目,然后在 Java 类里创建一个native 方法, 再在app/src/main 下创建 jni,然后创建 cpp 文件对于 native 方法。 以上是一个简单的jni 方法,你可以查看我以前的 文章: http://www.cnblogs.com/xiaoxiaoqingyi/p/6524165.html 在基本的jni 跑通下,我们把 opencv 库加入项目里,首先:   1、把 sdk/native 目录 拷贝到 项目的 jni 目录下,   然后就是配置 Android.mk文件:
LOCAL_PATH:=$(call my-dir)

include $(CLEAR_VARS)
OpenCV_INSTALL_MODULES := on
OpenCV_CAMERA_MODULES := off
OPENCV_LIB_TYPE :=STATIC

ifeq ("$(wildcard $(OPENCV_MK_PATH))","")
include $(LOCAL_PATH)/native/jni/OpenCV.mk
else
include $(OPENCV_MK_PATH)
endif
LOCAL_MODULE := OpenCV
LOCAL_SRC_FILES := com_magicing_eigenndk_NDKUtils.cpp
LOCAL_LDLIBS +=  -lm -llog
include $(BUILD_SHARED_LIBRARY)

 

接着配置 Application.mk 文件:
APP_STL := gnustl_static
APP_CPPFLAGS := -frtti -fexceptions
APP_PLATFORM := android-9
  最后在 cpp 文件调用 opencv 的方法, 首先导入 #include <opencv2/opencv.hpp> 如:
#include <jni.h>
#include <string>
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <opencv2/opencv.hpp>

using namespace cv;

extern "C"

  JNIEXPORT jintArray JNICALL Java_com_magicing_eigenndk_NDKUtils_gray(
          JNIEnv *env, jclass obj, jintArray buf, int w, int h) {

      jint *cbuf;
      cbuf = env->GetIntArrayElements(buf, JNI_FALSE );
      if (cbuf == NULL) {
          return 0;
      }

      Mat imgData(h, w, CV_8UC4, (unsigned char *) cbuf);

      uchar* ptr = imgData.ptr(0);
      for(int i = 0; i < w*h; i ++){
          //计算公式:Y(亮度) = 0.299*R + 0.587*G + 0.114*B
          //对于一个int四字节,其彩色值存储方式为:BGRA
          int grayScale = (int)(ptr[4*i+2]*0.299 + ptr[4*i+1]*0.587 + ptr[4*i+0]*0.114);
          ptr[4*i+1] = grayScale;
          ptr[4*i+2] = grayScale;
          ptr[4*i+0] = grayScale;
      }

      int size = w * h;
      jintArray result = env->NewIntArray(size);
      env->SetIntArrayRegion(result, 0, size, cbuf);
      env->ReleaseIntArrayElements(buf, cbuf, 0);
      return result;
  }
  然后在 activity 页面里显示处理过的图片,如下:
public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        NDKUtils ndk = new NDKUtils();

        Bitmap bitmap = ((BitmapDrawable) getResources().getDrawable(
                R.mipmap.pic_test)).getBitmap();
        int w = bitmap.getWidth(), h = bitmap.getHeight();
        int[] pix = new int[w * h];
        bitmap.getPixels(pix, 0, w, 0, 0, w, h);
        int [] resultPixes=ndk.gray(pix,w,h);
        Bitmap result = Bitmap.createBitmap(w,h, Bitmap.Config.RGB_565);
        result.setPixels(resultPixes, 0, w, 0, 0,w, h);

        ImageView img = (ImageView)findViewById(R.id.img2);
        img.setImageBitmap(result);

    }

}

运行成功后:

 

我编译成功的项目链接: https://github.com/xiaoxiaoqingyi/NDKDemos   (OpenCV_native项目) 官网参考资料: http://docs.opencv.org/2.4/doc/tutorials/introduction/a
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • Android 接入 OpenCV库的三种方式,androidopencv
  • 在Android Studio 配置OpenCV 3.1
  • 在Android Studio中安装OpenCV mac环境/Linux环境
  • 用Android studio进行 OpenCV 开发的第一个项目,androidopencv

相关文章

  • 2017-05-26json反序列化把空字符串转为null
  • 2017-05-26Android开发学习——Android项目的目录结构,android项目
  • 2017-05-26Java多线程常见问题,java多线程
  • 2017-05-26Android常用学习网站,android
  • 2017-05-26iOS,Android网络抓包教程之tcpdump
  • 2017-05-26andriod 读取网络图片,
  • 2017-05-26一个帖子学会Android开发四大组件,android四大
  • 2017-05-26Android中AsyncTask基本用法与源码剖析(API 23)
  • 2017-05-26android NDK 教程一(初识JNI--hello world)
  • 2017-05-26Android开发技巧之Camera拍照功能

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 6.2 数据存储与访问之——SharedPreferences保存用户偏好参数
    • Android Studio上面使用Ndk JNI 开发工程
    • Android中的自定义控件(二),android自定义控件
    • 明明已经执行Log.i,偏偏打不出日志,执行log.i日志
    • Android 代码动态改变View的属性
    • 上传单个文件到多台机器工具
    • 手游助手应用源码项目,游助手源码项目
    • Redhat下puppet集中配置管理
    • Android中使用开源框架android-image-indicator实现图片轮播部署,
    • Android 用Canvas画textview、bitmap、矩形(裁剪)、椭圆、线、点、弧

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有