AS下配置OpenCV环境
来源:互联网 发布:逆天pcb软件 编辑:程序博客网 时间:2024/06/14 18:21
AS下配置OpenCV环境
1.下载OpenCV4Android安装包,本实例中使用OpenCV3.1。解压后问价目录如下:
- apk:OpenCV_3.1.0_Manager_3.10安装包,Android OpenCV手机端使用
- samples:样例代码
- sdk:Android开发程序使用SDK
2.新建project,点击file->new modular,选择OpenCV-android-sdk\sdk\java目录,确认。
3.点击file->Project Structure,选择app,添加dependencies->modular dependency,选择OpenCV3.1,确认
4.最后修改openCVLibrary310下build.gradle中配置,使其与app目录下build.gradle相同。
//openCVLibrary310下build.gradleandroid { compileSdkVersion 23 buildToolsVersion "23.0.2" defaultConfig { minSdkVersion 15 targetSdkVersion 23 }
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
至此AS下OpenCV配置已经结束,使用样例中的代码进行测试,此不赘述。
OpenCV JNI配置
1.本示例中对图像进行轮廓提取,程序主体使用c++实现。
在MainActivity中添加如下函数public static native int[] ImgFun(int []buf,int w,int h);
2.使用javah生成其所对应的头文件:
3.在main目录下新建jni文件夹,将生成的头文件放入该文件夹下,向其中添加ImgFun.cpp Android.mk Application.mk文件。分别写入如下代码:
#Android.mk中添加代码:LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)OPENCV_LIB_TYPE:=STATICifeq ("$(wildcard $(OPENCV_MK_PATH))","")# include指向自己OpenCV-android-sdk\sdk\native\jni\OpenCV.mk对应位置include D:\download\OpenCV-3.1.0-android-sdk\OpenCV-android-sdk\sdk\native\jni\OpenCV.mkelseinclude $(OPENCV_MK_PATH)endifLOCAL_MODULE := ImgFunLOCAL_SRC_FILES := ImgFun.cppLOCAL_LDLIBS += -lm -lloginclude $(BUILD_SHARED_LIBRARY)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
# Application.mk写入代码如下:APP_STL := gnustl_staticAPP_CPPFLAGS := -frtti -fexceptionsAPP_ABI := armeabi-v7a
- 1
- 2
- 3
- 4
4.向app目录下build.gradle android{}中加入如下代码:
sourceSets.main{ jniLibs.srcDir 'src/main/libs' //set .so files directory to libs jni.srcDirs = [] //disable automatic ndk-build call }// call regular ndk-build(.cmd) script from app directory task ndkBuild(type: Exec) { commandLine 'D:\\Users\\XXX\\AppData\\Local\\Android\\sdk\\ndk-bundle\\ndk-build.cmd', '-C', file('src/main').absolutePath//windows系统下的操作;将路径替换为自己NDK所在位置; tasks.withType(JavaCompile) { compileTask -> compileTask.dependsOn ndkBuild }
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
记得在gradle.property中加上:android.useDeprecatedNdk=true
;
并且将NDK目录加入到local.properties中:
ndk.dir=D\:\\Users\\kangdekai\\AppData\\Local\\Android\\sdk\\ndk-bundlesdk.dir=D\:\\Users\\kangdekai\\AppData\\Local\\Android\\sdk
- 1
- 2
此时build project便可以看到生成的ImgFun.so文件(第一次竟然因为项目名称有特殊符号没有成功)
5.定义ImgFun.cpp如下:
#include "com_example_jniopencv_MainActivity.h"#include <stdio.h>#include <stdlib.h>#include <opencv2/opencv.hpp>using namespace cv;IplImage * change4channelTo3InIplImage(IplImage * src);extern "C" {JNIEXPORT jintArray JNICALL Java_com_example_jniopencv_MainActivity_ImgFun (JNIEnv *, jclass, jintArray, jint, jint);JNIEXPORT jintArray JNICALL Java_com_example_jniopencv_MainActivity_ImgFun (JNIEnv *env, jclass obj, jintArray buf, jint w, jint h) { jint *cbuf; cbuf = env->GetIntArrayElements(buf, false); if (cbuf == NULL) { return 0; } Mat myimg(h, w, CV_8UC4, (unsigned char*) cbuf); IplImage image=IplImage(myimg); IplImage* image3channel = change4channelTo3InIplImage(&image); IplImage* pCannyImage=cvCreateImage(cvGetSize(image3channel),IPL_DEPTH_8U,1); cvCanny(image3channel,pCannyImage,50,150,3); int* outImage=new int[w*h]; for(int i=0;i<w*h;i++) { outImage[i]=(int)pCannyImage->imageData[i]; } int size = w * h; jintArray result = env->NewIntArray(size); env->SetIntArrayRegion(result, 0, size, outImage); env->ReleaseIntArrayElements(buf, cbuf, 0); return result;}}IplImage * change4channelTo3InIplImage(IplImage * src) { if (src->nChannels != 4) { return NULL; } IplImage * destImg = cvCreateImage(cvGetSize(src), IPL_DEPTH_8U, 3); for (int row = 0; row < src->height; row++) { for (int col = 0; col < src->width; col++) { CvScalar s = cvGet2D(src, row, col); cvSet2D(destImg, row, col, s); } } return destImg;}
- 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
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
定义MainActivity如下:
static { System.loadLibrary("ImgFun"); } public static native int[] ImgFun(int []buf,int w,int h); ImageView mIv; Button btnNdk,btnRtn; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); TextView mtv=(TextView)findViewById(R.id.tv1);// Test mytest=new Test();// mtv.setText(mytest.myFun()); mtv.setText("你好!"); btnNdk=(Button)findViewById(R.id.button1); btnRtn=(Button)findViewById(R.id.button2); btnRtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mIv=(ImageView)findViewById(R.id.iV); Bitmap img = ((BitmapDrawable) getResources().getDrawable(R.drawable.image)).getBitmap(); mIv.setImageBitmap(img); } }); btnNdk.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { long current = System.currentTimeMillis(); Bitmap img1 = ((BitmapDrawable) getResources().getDrawable( R.drawable.image)).getBitmap(); int w = img1.getWidth(), h = img1.getHeight(); int[] pix = new int[w * h]; img1.getPixels(pix, 0, w, 0, 0, w, h); int[] resultInt = ImgFun(pix, w, h); Bitmap resultImg = Bitmap.createBitmap(w, h, Bitmap.Config.RGB_565); resultImg.setPixels(resultInt, 0, w, 0, 0, w, h); long performance = System.currentTimeMillis() - current; mIv.setImageBitmap(resultImg); } }); }
- 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
6.运行程序,便可看到如下效果了~
参考博文:
1.android studio 使用 jni 编译 opencv 完整实例 之 图像边缘检测!从此在andrid中自由使用 图像匹配、识别、检测
2.Android Studio 配置OpenCV、NDK,并用Jni调用OpenCV
3.在Android中使用JNI调用Opencv本地代码 配置方式 边缘检测 范例代码
4.OpenCV在Android环境下的使用方法
5.OpenCV4Android Samples
- AS下配置OpenCV环境
- AS环境下freeline增量编译配置
- Mac环境下AS配置Git
- linux环境下配置opencv
- windows环境下配置OpenCV
- vs 环境下opencv配置
- Linux环境下OpenCv开发环境配置
- Ubuntu下配置OpenCV开发环境
- OpenCV/OpenGL 在vs2008下环境配置
- OpenCV 在ubuntu下环境配置
- VC++6.0环境下的OpenCV配置
- VS2010环境下OpenCV&OpenGL配置
- qt下配置opencv环境注意事项
- 在Linux下配置OpenCV环境
- Windows下轻松配置openCV开发环境
- Windows下OpenCV的环境配置
- Windows 下配置 Opencv 开发环境
- Mac 环境下配置opencv(Eclipse)
- 你应该知道的 RPC 原理
- git操作常用命令
- 开启新篇章
- 我的Git学习笔记
- csu1164 Dominating
- AS下配置OpenCV环境
- 无需软件开启wifi
- 将SVN服务器程序安装成Windows服务的方法
- 阿里云maven中国仓库
- 自定义video标签的大小
- Android研发规范
- Android studio 编译 release版本 命令
- [设计模式]代理模式
- IoT 的成年仪式-通讯协定技术变革