当前位置: 首页 > news >正文

!! 2.对十份论文和报告中的关于OpenCV和Android NDK开发的总结

http://hujiaweibujidao.github.io/blog/2013/11/18/android-ndk-and-opencv-development-3/

Android Ndk and Opencv Development 3

NOV 18TH, 2013

Android NDK 和 OpenCV 整合开发总结(3)

终于写到第三节啦,虽然很累,但是还是要坚持,坚持写完这3篇文章。

这一节的主要内容是OpenCV在Android NDK开发中的应用,包括下面几个方面的内容:

  • 如何实现Static Initialization从而不需要安装OpenCV Manager运行含OpenCV library的app
  • 对十份论文和报告中的关于OpenCV和Android NDK开发的总结
  • 如何使用Android中的摄像头,常见的问题有哪些?
  • OpenCV 和 Android NDK 整合开发的一般途径

1.实现Static Initialization

实现Static Initialization就是指将OpenCV Library添加到app package中,不需要安装OpenCV Manager这个app就能运行,官方文档有介绍,但是不详细,尤其是最后那句代码到底要放在什么地方很多人都不清楚,其实并不需要像官方文档中介绍的那样配置,我想在这里介绍下如何修改FaceDetection项目的源码来做到这点。(最好是找一个包含jni代码的项目进行修改)

  • [1]打开jni下的Android.mk文件,修改OpenCV的那一部分,将off设置为on,并设置OpenCV_LIB_TYPESHARED,结果如下:
1
2
3
4
OpenCV_CAMERA_MODULES:=on
OpenCV_INSTALL_MODULES:=on OpenCV_LIB_TYPE:=SHARED include ${OpenCVROOT}/sdk/native/jni/OpenCV.mk 
  • [2]打开FdActivity.java文件,在其中添加一个静态初始化块代码,它是用来加载OpenCV_java库的,由于FaceDetection中还用了另一个库detection_based_tracker(用于人脸跟踪),所以要在else子句中加载进来:
1
2
3
4
5
6 7 8 
static {
	Log.i(TAG, "OpenCV library load!");  if (!OpenCVLoader.initDebug()) {  Log.i(TAG, "OpenCV load not successfully");  } else {  System.loadLibrary("detection_based_tracker");// load other libraries  } } 
  • [3]删除FdActivity.java的OnResume()方法的最后那句,不让它去访问OpenCV Manager。
1
2
3
4
5
@Override
public void onResume() {  super.onResume(); //OpenCVLoader.initAsync(OpenCVLoader.OpenCV_VERSION_2_4_3, this, mLoaderCallback);// } 
  • [4]修改FdActivity.java的OnCreate()方法,从上面的private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this)代码块中拷贝try-catch块放到OnCreate的setContentView()之后,然后拷贝mOpenCVCameraView.enableView();放到mOpenCVCameraView = (CameraBridgeViewBase) findViewById(R.id.fd_activity_surface_view);之后,修改后的OnCreate()方法如下:
1
2
3
4
5
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 
public void onCreate(Bundle savedInstanceState) {  Log.i(TAG, "called onCreate");  super.onCreate(savedInstanceState);  getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);   setContentView(R.layout.face_detect_surface_view);   //  try {  // load cascade file from application resources  InputStream is = getResources().openRawResource(R.raw.lbpcascade_frontalface);  File cascadeDir = getDir("cascade", Context.MODE_PRIVATE);  mCascadeFile = new File(cascadeDir, "lbpcascade_frontalface.xml");  FileOutputStream os = new FileOutputStream(mCascadeFile);   byte[] buffer = new byte[4096];  int bytesRead;  while ((bytesRead = is.read(buffer)) != -1) {  os.write(buffer, 0, bytesRead);  }  is.close();  os.close();   mJavaDetector = new CascadeClassifier(mCascadeFile.getAbsolutePath());  if (mJavaDetector.empty()) {  Log.e(TAG, "Failed to load cascade classifier");  mJavaDetector = null;  } else  Log.i(TAG, "Loaded cascade classifier from " + mCascadeFile.getAbsolutePath());   mNativeDetector = new DetectionBasedTracker(mCascadeFile.getAbsolutePath(), 0);// hujiawei   cascadeDir.delete();   } catch (IOException e) {  e.printStackTrace();  

转载于:https://www.cnblogs.com/carl2380/p/4194124.html

相关文章:

  • LSPCI具体解释分析
  • urb传输的代码分析
  • 32位Windows 7环境安装Pydasm和Pydbg
  • usb学习有感
  • LoadImage()的使用
  • linux下删除.svn命令
  • 嵌入式开发资料集锦
  • Cassandra的事务支持及数据一致性解决方案
  • 表变量和临时表
  • 常见排序算法时间复杂度
  • 老子《道德经》第二十五章
  • SVN
  • sql自定义函数及C#中调用
  • json-lib codehuas copyright
  • 周记 2015.1.17
  • JavaScript-如何实现克隆(clone)函数
  • 【React系列】如何构建React应用程序
  • 【刷算法】从上往下打印二叉树
  • JavaScript 是如何工作的:WebRTC 和对等网络的机制!
  • JavaScript设计模式之工厂模式
  • mongodb--安装和初步使用教程
  • mysql常用命令汇总
  • python学习笔记-类对象的信息
  • QQ浏览器x5内核的兼容性问题
  • Redux系列x:源码分析
  • Theano - 导数
  • 道格拉斯-普克 抽稀算法 附javascript实现
  • 聊聊flink的BlobWriter
  • 扫描识别控件Dynamic Web TWAIN v12.2发布,改进SSL证书
  • 算法-插入排序
  • 我感觉这是史上最牛的防sql注入方法类
  • 译米田引理
  • Java数据解析之JSON
  • 机器人开始自主学习,是人类福祉,还是定时炸弹? ...
  • ​flutter 代码混淆
  • #if #elif #endif
  • $.proxy和$.extend
  • (+3)1.3敏捷宣言与敏捷过程的特点
  • (0)Nginx 功能特性
  • (1) caustics\
  • (Bean工厂的后处理器入门)学习Spring的第七天
  • (python)数据结构---字典
  • (带教程)商业版SEO关键词按天计费系统:关键词排名优化、代理服务、手机自适应及搭建教程
  • (七)理解angular中的module和injector,即依赖注入
  • (七)微服务分布式云架构spring cloud - common-service 项目构建过程
  • (实战篇)如何缓存数据
  • (五)MySQL的备份及恢复
  • (转)winform之ListView
  • (转)用.Net的File控件上传文件的解决方案
  • (转载)(官方)UE4--图像编程----着色器开发
  • (最优化理论与方法)第二章最优化所需基础知识-第三节:重要凸集举例
  • *_zh_CN.properties 国际化资源文件 struts 防乱码等
  • ./configure、make、make install 命令
  • .net core 实现redis分片_基于 Redis 的分布式任务调度框架 earth-frost
  • .Net 高效开发之不可错过的实用工具