Android 接入 OpenCV库的三种方式



- apply plugin: 'com.android.library'
- android {
- compileSdkVersion
- buildToolsVersion "25.0.0"
- defaultConfig {
- minSdkVersion
- targetSdkVersion
- }
- buildTypes {
- release {
- minifyEnabled false
- proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
- }
- }
- }

- 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)
- APP_STL := gnustl_static
- APP_CPPFLAGS := -frtti -fexceptions
- APP_PLATFORM := android-
- #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 ;
- }
- Mat imgData(h, w, CV_8UC4, (unsigned char *) cbuf);
- uchar* ptr = imgData.ptr();
- for(int i = ; i < w*h; i ++){
- //计算公式:Y(亮度) = 0.299*R + 0.587*G + 0.114*B
- //对于一个int四字节,其彩色值存储方式为:BGRA
- int grayScale = (int)(ptr[*i+]*0.299 + ptr[*i+]*0.587 + ptr[*i+]*0.114);
- ptr[*i+] = grayScale;
- ptr[*i+] = grayScale;
- ptr[*i+] = grayScale;
- }
- int size = w * h;
- jintArray result = env->NewIntArray(size);
- env->SetIntArrayRegion(result, , size, cbuf);
- env->ReleaseIntArrayElements(buf, cbuf, );
- return result;
- }
- 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, , w, , , w, h);
- int [] resultPixes=ndk.gray(pix,w,h);
- Bitmap result = Bitmap.createBitmap(w,h, Bitmap.Config.RGB_565);
- result.setPixels(resultPixes, , w, , ,w, h);
- ImageView img = (ImageView)findViewById(R.id.img2);
- img.setImageBitmap(result);
- }
- }
运行成功后:
Android 接入 OpenCV库的三种方式的更多相关文章
- android中解析文件的三种方式
android中解析文件的三种方式 好久没有动手写点东西了,最近在研究android的相关技术,现在就android中解析文件的三种方式做以下总结.其主要有:SAX(Simple API fo ...
- Android中关闭应用的三种方式
当应用不再使用的时候,通常需要关闭应用,我们可以使用三种方式关闭android应用: 第一种方式:首先获取当前进程的id,然后杀死该进程(推荐) android.os.Process.killProc ...
- 界面跳转+Android Studio Button事件的三种方式
今天学习界面跳转 java类总是不能新建成功 看了网上教程 (20条消息) 关于android studio无法创建类或者接口问题的解决方法_qq_39916160的博客-CSDN博客 可以新建了 但 ...
- Android实现全屏的三种方式
一.通过代码 requestWindowFeature(Window.FEATURE_NO_TITLE);// 隐藏标题栏 getWindow().setFlags(WindowManager.Lay ...
- Android之——ContentResolver查询的三种方式
转载请注明出处:http://blog.csdn.net/l1028386804/article/details/47785491 今天做到一个小项目.查询手机中短信的信息,当然得去系统暴露出来的数据 ...
- Android自动轮播的三种方式
方法一:在runable里判断,不是最后条目的时候++,是的话=0,获取当前条目,给viewpager设置,然后在runable里递归post,在外面也post这个run // 自动轮播条显示 if ...
- 【Android学习】数据传递三种方式
1.Application 注意在清单文件中的Application节点下注册android:name属性, 继承Application类,重写onCreate方法, 使用数据时,实例化自定义类时需要 ...
- OpenCV4Android释疑: 透析Android以JNI调OpenCV的三种方式(让OpenCVManager永不困扰)
OpenCV4Android释疑: 透析Android以JNI调OpenCV的三种方式(让OpenCVManager永不困扰) 前文曾详细探讨了关于OpenCV的使用,原本以为天下已太平.但不断有人反 ...
- Android 使用OpenCV的三种方式(Android Studio)
http://blog.csdn.net/sbsujjbcy/article/details/49520791 其实最早接触OpenCV是很久很久之前的事了,大概在2013年的5,6月份,当时还是个菜 ...
随机推荐
- c++编程思想(四)--对象和隐藏(感觉书上有误)
c++编程思想里数据抽象和隐藏实现实际就是通常所说的类和封装: 封装,继承,多态对象特点说的很多,就不再说了 关于封装,本人觉得书上有个地方写的有问题,p145和p153都提到Y::f(X*)引用了X ...
- Java集合框架之三:HashMap源码解析
版权声明:本文为博主原创文章,转载请注明出处,欢迎交流学习! HashMap在我们的工作中应用的非常广泛,在工作面试中也经常会被问到,对于这样一个重要的集合模型我们有必要弄清楚它的使用方法和它底层的实 ...
- [译]AngularJS 1.3.0 开发者指南(一) -- 介绍
[译]AngularJS 1.3.0 开发者指南(一) -- 介绍 Angular是什么 ? AngularJS是一款针对动态web应用的结构框架. 它可以让像使用模板语言使用HTML, 并且可以扩展 ...
- Visual Studio 2013 百度云下载地址
Visual Studio 2013 百度云下载地址 链接:http://pan.baidu.com/s/1sjFifox 密码: ipqe VS2013注册码:BWG7X-J98B3-W34RT-3 ...
- .Net小白的第一篇博客
2016年8月8日,经过了一周的纠结.我决定放弃了,原来学了六年并且工作两年的学前教育,走上了开发的道路.我认为生活就应该这样,就应该充满挑战,而不是每天在重复相同的工作!作为插班生的我,于2016年 ...
- 阿里云开发之OSS数据迁移
最近由于项目需求,需要将一个aliyun账号下的oss数据导入到两一个aliyun账号下的oss,经过一番坎坷,最终搞定. 1.查看oss数据迁移官方文档,我是在本地windows电脑上进行操作的,先 ...
- tp框架基础(详细步骤分解,易懂)下
在浏览器中如果要访问操作方法的时候以什么方式来访问 有四种方式 第一种是get方式,第二种是访问路径 这四种方式我们可以通过修改配置文件来改掉url的模式 我们需要来改一下我们的配置文件 在这个路径下 ...
- Json数据解析在Unity3d中的应用
最近做项目过程中因为Json文件名写错了一个字母Unity报错,找错误找到半夜,当时为了验错,写了一个小Demo,正好借此总结一下Json. 1.什么是Json JSON(JavaScript Obj ...
- 【解题报告】VijosP1351 棋盘制作
思路: 1. 矩形:用f[i][j][1]表示右下角为(I,j),最大的,符合条件的矩形的长,用f[i][j][2]表示右下角为(I,j),最大的,符合条件的矩形的高,预设f内所有元素为1 If(a[ ...
- 每天一个Linux命令 5
命令名称:touch 功能描叙:创建空文件 格式:touch 文件名 范例:$touch japan.list(当前路径创建) $touch /root/japan.list(指定路径创建) $t ...