1. 下载 OpenCV-3.0.0-android-sdk-1.zip
  2. 打开 intellj,新建立一个 android 工程后选择工程属性,导入模块(Import module from external model" with Eclipse option),选择文件夹 OpenCV-3.0.0-android-sdk\sdk\java

  3. 设置工程依赖

  1. package com.example.testopencv;
  2. import android.content.Intent;
  3. import android.graphics.BitmapFactory;
  4. import android.net.Uri;
  5. import android.view.View;
  6. import android.widget.Button;
  7. import org.opencv.android.BaseLoaderCallback;
  8. import org.opencv.android.LoaderCallbackInterface;
  9. import org.opencv.android.OpenCVLoader;
  10. import org.opencv.android.Utils;
  11. import org.opencv.core.Mat;
  12. import org.opencv.core.Point;
  13. import org.opencv.core.Scalar;
  14. import android.os.Bundle;
  15. import android.widget.ImageView;
  16. import android.app.Activity;
  17. import android.graphics.Bitmap;
  18. import org.opencv.imgproc.Imgproc;
  19. import java.io.FileNotFoundException;
  20. import java.io.InputStream;
  21. public class MyActivity extends Activity {
  22. /**
  23. * Called when the activity is first created.
  24. */
  25. private static final int SELECT_PHOTO = 100;
  26. private Button selectbt;
  27. private Button processbt;
  28. private Bitmap image;
  29. private ImageView iv;
  30. @Override
  31. public void onCreate(Bundle savedInstanceState) {
  32. super.onCreate(savedInstanceState);
  33. setContentView(R.layout.main);
  34. selectbt = (Button) findViewById(R.id.button);
  35. processbt = (Button) findViewById(R.id.start);
  36. iv = (ImageView) findViewById(R.id.imageView);
  37. //选择图片
  38. selectbt.setOnClickListener(new View.OnClickListener() {
  39. @Override
  40. public void onClick(View v) {
  41. Intent photoPickerIntent = new Intent(Intent.ACTION_PICK);
  42. photoPickerIntent.setType("image/*");
  43. startActivityForResult(photoPickerIntent, SELECT_PHOTO);
  44. }
  45. });
  46. processbt.setOnClickListener(new View.OnClickListener() {
  47. @Override
  48. public void onClick(View v) {
  49. OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_3_0_0, MyActivity.this, mLoaderCallback);
  50. }
  51. });
  52. }
  53. @Override
  54. protected void onActivityResult(int requestCode, int resultCode, Intent imageReturnedIntent) {
  55. super.onActivityResult(requestCode, resultCode, imageReturnedIntent);
  56. switch(requestCode) {
  57. case SELECT_PHOTO:
  58. if(resultCode == RESULT_OK){
  59. Uri selectedImage = imageReturnedIntent.getData();
  60. InputStream imageStream = null;
  61. try {
  62. imageStream = getContentResolver().openInputStream(selectedImage);
  63. } catch (FileNotFoundException e) {
  64. e.printStackTrace();
  65. }
  66. image = BitmapFactory.decodeStream(imageStream);
  67. }
  68. }
  69. }
  70. //process button
  71. private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) {
  72. @Override
  73. public void onManagerConnected(int status) {
  74. if (status == LoaderCallbackInterface.SUCCESS ) {
  75. mainProcess();
  76. } else {
  77. super.onManagerConnected(status);
  78. }
  79. }
  80. };
  81. // 增加文字在图像上
  82. private void mainProcess() {
  83. Mat m = new Mat();
  84. Utils.bitmapToMat(this.image, m);
  85. Imgproc.putText(m, "=====OPENCV PUTTEXT TEST=====", new Point(20, 40), 3, 1, new Scalar(0, 255, 0, 255), 2);
  86. Bitmap bm = Bitmap.createBitmap(m.cols(), m.rows(), Bitmap.Config.ARGB_8888);
  87. Utils.matToBitmap(m, bm);
  88. iv.setImageBitmap(bm);
  89. }
  90. @Override
  91. protected void onResume() {
  92. super.onResume();
  93. }
  94. }

增加权限

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"
  3. package="com.example.testopencv"
  4. android:versionCode="1"
  5. android:versionName="1.0">
  6. <uses-sdk android:minSdkVersion="17"/>
  7. <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
  8. <application android:label="@string/app_name" android:icon="@drawable/ic_launcher">
  9. <activity android:name="MyActivity"
  10. android:label="@string/app_name">
  11. <intent-filter>
  12. <action android:name="android.intent.action.MAIN"/>
  13. <category android:name="android.intent.category.LAUNCHER"/>
  14. </intent-filter>
  15. </activity>
  16. </application>
  17. </manifest>

ref

http://answers.opencv.org/question/16993/display-image/

APK download

http://pan.baidu.com/s/1ntN9KBv

source code

http://pan.baidu.com/s/1i3D8Aqh

opencv3.0 在 android 上的使用的更多相关文章

  1. Android上使用OpenGLES2.0显示YUV数据

    在Android上用OpenGLES来显示YUV图像,之所以这样做,是因为: 1.Android本身也不能直接显示YUV图像,YUV转成RGB还是必要的: 2.YUV手动转RGB会占用大量的CPU资源 ...

  2. 在Android上编译OSG[3.0.2 ] (转)

    在Android上编译OSG[3.0.2 ] 分类:Android   This file contents can be applied for version OpenSceneGraph(OSG ...

  3. android上实现0.5px线条

    转: android上实现0.5px线条 由于安卓手机无法识别border: 0.5px,因此我们要用0.5px的话必须要借助css3中的-webkit-transform:scale缩放来实现. 原 ...

  4. 通杀所有系统的硬件漏洞?聊一聊Drammer,Android上的RowHammer攻击

    通杀所有系统的硬件漏洞?聊一聊Drammer,Android上的RowHammer攻击 大家肯定知道前几天刚爆出来一个linux内核(Android也用的linux内核)的dirtycow漏洞.此洞可 ...

  5. 在Android上使用qemu-user运行可执行文件

    在Android上使用qemu-user运行可执行文件 作者:寻禹@阿里聚安全 前言 QEMU简要介绍: QEMU可以解释执行可执行程序.既然QEMU可以解释执行可执行程序,那么QEMU就能够知道执行 ...

  6. 编译可在Android上运行的qemu user mode

    前言 本文在Ubuntu 64位系统上对qemu项目进行交叉编译,并且只编译与qemu user mode有关的代码. 下文中的”NDK”若无特殊说明均指”Android NDK”. 下文中”$NDK ...

  7. 系列篇|编译可在Android上运行的依赖库(一):glib库

    前言 这是系列文章,它们由<编译可在Android上运行的glib库>及其他4篇文章组成,这4篇文章在“编译依赖库”一节中列出.由于glib库依赖于其他第三方库,所以需要先将依赖的第三方库 ...

  8. [转]opencv3.0 鱼眼相机标定

    [原文转自]:http://blog.csdn.net/qq_15947787/article/details/51441031 前两天发表的时候没注意,代码出了点错误,所以修改了一下,重新发上来.  ...

  9. TensorFlow 在android上的Demo(1)

    转载时请注明出处: 修雨轩陈 系统环境说明: ------------------------------------ 操作系统 : ubunt 14.03 _ x86_64 操作系统 内存: 8GB ...

随机推荐

  1. sdk manager更新超时 time out

    sdk manager选择菜单tools->options,勾选下面的force https......重启sdk manager

  2. windows xp 无法连接wpa无线网络

    其实以前一直是可以的,不知为什么前几天忽然就不能加入原有的无线网了.我的无线网是WPA加密的,采用DHCP分配IP(但针对特定MAC地址分配静态IP). 在网上找了许久,有的网友认为应该把无线网卡(那 ...

  3. 【原创】Eclipse中为SVN设置快捷键

            SVN是深受开发者喜爱的版本控制工具,其较CVS有更好的控制策略.在Android开发中,我也选择SVN作为版本控制工具.Eclipse的SVN插件名叫Subclipse,可以到htt ...

  4. JVM垃圾回收机制总结(2) :基本算法概述

    1.引用计数收集器 (Reference Counting) 引用计数是垃圾收集的早期策略.在这种方法中,堆中每一个对象都有一个引用计数.一个对象被创建了,并且指向该对象的引用被分配给一个变量,这个对 ...

  5. [置顶] 炎炎夏日,给你一次极爽的开发体验!——统一开发环境功能升级优化,正式上线V2.0!

    作为中国移动应用运行托管平台(MM应用引擎)的开发部署工具,统一开发环境(UDE)在原HTML5跨平台开发功能基础上优化升级,新增跨平台编译(Android/iOS)和云端托管服务,正式上线2.0版本 ...

  6. ExtJs布局大全

    1.Fit 布局 在Fit 布局中,子元素将自动填满整个父容器.注意:在fit 布局下,对其子元素设置宽度是无效的.如果在fit 布局中放置了多个组件,则只会显示第一个子元素.在Fit 布局中,子元素 ...

  7. Android HTTPS(4)直接用SSLSocket,黑名单,客户端证书

    Warnings About Using SSLSocket Directly So far, the examples have focused on HTTPS using HttpsURLCon ...

  8. [51NOD]大数加法(模拟)

    题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1005 要处理符号,还要特别注意0和连续进位等情况.偷懒使用st ...

  9. [转]深入hibernate的三种状态

    学过hibernate的人都可能都知道hibernate有三种状态,transient(瞬时状态),persistent(持久化状态)以及detached(离线状态),大家伙也许也知道这三者之间的区别 ...

  10. 【转载】Javascript中的this关键字

    看了这篇文章 http://www.ruanyifeng.com/blog/2010/04/using_this_keyword_in_javascript.html 分情况讨论. 情况一:纯粹的函数 ...