❶ 如何将自己编写的C和OPENCV程序在android手机上运行
可以直接在手机上运行。android专业开发肯定都是直接用真机运行项目的。
运行方式:
1. 手机打开 USB调式模式(不同的手机操作可能打开方式不一样)
2. 将手机连接到电脑,
3. 电脑上安装手机USB驱动程序
4. 运行android 应用
点击工程 run as android application后,系统就会查找已经连接到电脑的设备,选择已经连接的设备即可运行在手机上了。
❷ android opencv 开发怎么实现不安装 manager
本文介绍eclipse下配置javacv的开发环境,过程十分简单,最后会举一个实例(FacePreview)进行验证配置是否成功。阅读本文的前提是Android+eclipse开发环境已经配置好(当然javacv并不是专为android而写的,普通java程序也是支持的)。
一、打开网页:http://code.google.com/p/javacv/。点击:Downloads,下载javacv-0.5-bin.zip及javacv-0.5-cppjars.zip,解压到任意目录。
二、点击Project Home,回到原来的页面,看到下面这段话:
Eclipse (Android 2.2 or newer):
Follow the instructions on this page: http://developer.android.com/training/basics/firstapp/
Go to File > New > Folder, select your project as parent folder, type "libs/armeabi" as Folder name, and click Finish.
Copy javacpp.jar and javacv.jar into
the newly created "libs" folder.
Extract all the *.so files from javacv-android-arm.jar, opencv-2.4.5-android-arm.jar,
and ffmpeg-1.2-android-arm.jar directly into the newly created "libs/armeabi" folder, without creating any of the subdirectories
found in the JAR files.
Navigate to Project > Properties > Java Build Path > Libraries and click "Add JARs...".
Select both javacpp.jar and javacv.jar from
the newly created "libs" folder.
三、按照二的步骤做,里面的第一步可以不理。第二、第三步很简单,第四步是把三个jar包里的.so文件提取出来,放到“libs/armeabi”目录下,提取方法:把jar重命名为rar,打开即可看到一堆.so文件。现在很多压缩软件可以打开jar包里面的文件,打开后直接拖过去即可。第五、第六步也很简单,照做即可。
下面举一个实例:FacePreview。要注意的是javacv的运行要求Android 2.2 on ARMv7 or newer versions,有些机子可能会运行不了。
一、eclipse新建一个工程,工程名:FacePreview,包名:com.googlecode.javacv.facepreview。
把javacv-bin/samples下的FacePreview.java复制到当前工程下替换原来的FacePreview.java。注意到
FacePreview.java里第25行的注释里提到:“IMPORTANT – Make sure your
AndroidManifiest.xml file includes the
following”,要把拍照的权限加到AndroidManifiest.xml里。
二、第110行处:File classifierFile = Loader.extractResource(getClass(),
“/com/googlecode/javacv/facepreview/haarcascade_frontalface_alt.xml”,
context.getCacheDir(), “classifier”,
“.xml”);用到了haarcascade_frontalface_alt.xml,如果找不到这个文件就网上下一个,然后把
haarcascade_frontalface_alt.xml放到指定位置。
三、把上文中提到的jar包及.so文件加入进去。
四、运行程序,大功告成。
After that, the wrapper classes for OpenCV and FFmpeg can automatically access all of their C/C++ APIs。
❸ C++写的OpenCV程序怎么实现在Android平台
使用ndk可以在android里使用C++。
去下一个android-ndk
然后去装一个opencv for android
http://opencv.willowgarage.com/wiki/Android
❹ android-opencv
android opencv的包里有例程的,看例程就是最好的教程,例程调通了基本也差不多了,剩下的实际上就是图像处理的功夫了。之前用了时候也是照着例程自己改的,基本opencv的函数在android的版本里都有的。
❺ opencv 安卓开发用什么语言
各国语言
❻ 如何在Android中使用OpenCV
如何在Android程序中使用OpenCV
有两种方式(重点讲后面一种):
1.使用OpenCV Java API。
OpenCV安装路径"F:OpenCV-2.3.1-android-bin"下有两个文件夹,
将文件夹"OpenCV-2.3.1"拷贝到你的Eclipse工作空间所在的目录,也就是在你的项目的上一级目录中,然后导入到工作空间中,在Package Explorer中选择你的项目,单机右键在弹出菜单中选择Properties,然后在弹出的Properties窗口中左侧选择Android,然后点击右下方的Add按钮,选择OpenCV-2.3.1并点击OK,
此时,展开你的项目树,你可以看到新加了一个OpenCV-2.3.1_src目录,如下图,那么就是正确添加了OpenCV Java API,否则就是你放置OpenCV-2.3.1的目录路径不正确。
然后就可以在你的Java源文件中导入OpenCV的API包,并且使用OpenCV API了,OpenCV API的包的形式如下:
Org.opencv.(OpenCV模块名).(OpenCV类名)
例如:
Org.opencv.core.Mat
2.利用JNI编写C++ OpenCV代码,通过Android NDK创建动态库(.so)
新建一个工作空间,例如"TestOpenCV",在Window->Preferences中设置好Android SDK的路径。
然后新建一个Android项目,Build Target选择Android2.2,命名为"HaveImgFun",活动名改为HaveImgFun,Package name中填写com.testopencv.haveimgfun,最后点击finish。
如同使用OpenCV Java API那样,将OpenCV-2.3.1文件夹拷贝到与工作空间同一级目录中;另外,将"F:OpenCV-2.3.1-android-binsamples"下的includeOpenCV.mk文件拷贝到和项目HaveImgFun同一级目录中:
(上面这个各个文件夹和文件的放置很重要,因为OpenCV-2.3.1下的OpenCV.mk中有很多相对路径的指定,如果不是这样放置,在NDK生成动态库时可能会报文件或文件夹无法找到的错误)
选择Package Explorer中你的项目,右键选择new->folder,新建一个名为jni的文件夹,用来存放你的c/c++代码。
然后把res->layout下的main.xml的内容改为下面所示:
1 <?xml version="1.0" encoding="utf-8"?>
2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
3 android:orientation="vertical"
4 android:layout_width="fill_parent"
5 android:layout_height="fill_parent"
6 >
7 <Button android:layout_height="wrap_content"
8 android:layout_width="fill_parent"
9 android:id="@+id/btnNDK"
10 android:text="使用C++ OpenCV进行处理" />
11 <Button android:layout_height="wrap_content"
12 android:layout_width="fill_parent"
13 android:id="@+id/btnRestore"
14 android:text="还原" />
15 <ImageView android:id="@+id/ImageView01"
16 android:layout_width="fill_parent"
17 android:layout_height="fill_parent" />
18 </LinearLayout>
上面的代码就是一个线性布局里面包含2个按钮加上一个显示图像的ImageView
在文件夹src下的com.testopencv.haveimgfun包中新建一个类用于包装使用了opencv c++代码的动态库的导出函数,类名为LibImgFun。
Eclipse会为你创建一个新的文件LibImgFun.java,将里面的内容改为:
1 package com.testopencv.haveimgfun;
2 public class LibImgFun {
3 static {
4 System.loadLibrary("ImgFun");
5 }
6 /**
7 * @param width the current view width
8 * @param height the current view height
9 */
10 public static native int[] ImgFun(int[] buf, int w, int h);
11 }
从上面的代码可以得知,我们的动态库名字应该为“libImgFun.so”,注意"public static native int[] ImgFun(int[] buf, int w, int h)"中的native关键字,表明这个函数来自native code。static表示这是一个静态函数,这样就可以直接用类名去调用。
在jni文件夹下建立一个"ImgFun.cpp"的文件,内容改为下面所示:
1 #include <jni.h>
2 #include <stdio.h>
3 #include <stdlib.h>
4 #include <opencv2/opencv.hpp>
5 using namespace cv;
6
7 extern "C"
8 {
9 JNIEXPORT jintArray JNICALL Java_com_testopencv_haveimgfun_LibImgFun_ImgFun(JNIEnv* env, jobject obj, jintArray buf, int w, int h);
10 JNIEXPORT jintArray JNICALL Java_com_testopencv_haveimgfun_LibImgFun_ImgFun(JNIEnv* env, jobject obj, jintArray buf, int w, int h){
11
12 jint *cbuf;
13 cbuf = env->GetIntArrayElements(buf, false);
14 if(cbuf == NULL)
15 {
16 return 0;
17 }
18
19 Mat myimg(h, w, CV_8UC4, (unsigned char*)cbuf);
20 for(int j=0;j<myimg.rows/2;j++)
21 {
22 myimg.row(j).setTo(Scalar(0,0,0,0));
23 }
24
25 int size=w * h;
26 jintArray result = env->NewIntArray(size);
27 env->SetIntArrayRegion(result, 0, size, cbuf);
28 env->ReleaseIntArrayElements(buf, cbuf, 0);
29 return result;
30 }
31 }
上面的代码中#include <jni.h>是必须要包含的头文件,#include <opencv2/opencv.hpp>是opencv要包含的头文件。
动态库要导出的函数如下声明:
JNIEXPORT jintArray JNICALL Java_com_testopencv_haveimgfun_LibImgFun_ImgFun(JNIEnv* env, jobject obj, jintArray buf, int w, int h);
JNIEXPORT 和JNICALL是必须要加的关键字
jintArray就是int[],这里返回类型要么为空,要么为jni中定义的类型,事实上就是CC++类型前面加上j,如果是数组,则在后面加上Array。
函数名的命名规则如下:
Java_(包路径)_(类名)_(函数名) (JNIEnv *env, jobject obj, 自己定义的参数...)
包路径中的"."用"_"(下划线)代替,类名就是上面包装该动态库函数的类的名字,最后一个才是真正的函数名;JNIEnv *env和jobject obj这两个参数时必须的,用来调用JNI环境下的一些函数;后面就是你自己定义的参数。在这里,jintArray buf代表了传进来的图像的数据,int w是图像的宽,int h是图像的高。
这个函数的功能是将传进来的图像的上半部分涂成黑色。
然后再在jni下新建两个文件"Android.mk"文件和"Application.mk"文件,这两个文件事实上就是简单的Makefile文件。
其中将Android.mk的内容改为如下所示:
LOCAL_PATH:=$(callmy-dir)
include$(CLEAR_VARS)
include../includeOpenCV.mk
ifeq("$(wildcard$(OPENCV_MK_PATH))","")
#trytoloadOpenCV.mkfromdefaultinstalllocation
include$(TOOLCHAIN_PREBUILT_ROOT)/user/share/OpenCV/OpenCV.mk
else
include$(OPENCV_MK_PATH)
endif
LOCAL_MODULE:=ImgFun
LOCAL_SRC_FILES:=ImgFun.cpp
include$(BUILD_SHARED_LIBRARY)
Application.mk的内容改为如下所示:
APP_STL:=gnustl_static
APP_CPPFLAGS:=-frtti-fexceptions
APP_ABI:=armeabiarmeabi-v7a
其中APP_ABI指定的是目标平台的CPU架构。(经过很多测试,android2.2必须指定为armeabi,android2.2以上的使用armeabi-v7a,如果没有设置对,很有可能安装到android虚拟机失败,当然你同时如上面写上也是可以的)
上面的步骤完成后,就可以使用NDK生成动态库了,打开cygwin,cd到项目目录下:
输入$NDK/ndk-build命令,开始创建动态库。
这时候刷新Eclipse的Package Explorer会出现两个新的文件夹obj和libs。
现在,只剩最后一步完成这个测试程序。
将一张图片,例如"lena.jpg"放到项目res->drawable-hdpi目录中并刷新该目录。
然后将HaveImgFun.java的内容改为下面所示:
1 package com.testopencv.haveimgfun;
2
3 import android.app.Activity;
4 import android.graphics.Bitmap;
5 import android.graphics.Bitmap.Config;
6 import android.graphics.drawable.BitmapDrawable;
7 import android.os.Bundle;
8 import android.widget.Button;
9 import android.view.View;
10 import android.widget.ImageView;
11
12 public class HaveImgFun extends Activity{
13 /** Called when the activity is first created. */
14 ImageView imgView;
15 Button btnNDK, btnRestore;
16
17 @Override
18 public void onCreate(Bundle savedInstanceState) {
19 super.onCreate(savedInstanceState);
20 setContentView(R.layout.main);
21
22 this.setTitle("使用NDK转换灰度图");
23 btnRestore=(Button)this.findViewById(R.id.btnRestore);
24 btnRestore.setOnClickListener(new ClickEvent());
25 btnNDK=(Button)this.findViewById(R.id.btnNDK);
26 btnNDK.setOnClickListener(new ClickEvent());
27 imgView=(ImageView)this.findViewById(R.id.ImageView01);
28 Bitmap img=((BitmapDrawable) getResources().getDrawable(R.drawable.lena)).getBitmap();
29 imgView.setImageBitmap(img);
30 }
31
32 class ClickEvent implements View.OnClickListener{
33 public void onClick(View v){
34 if(v == btnNDK){
35 long current=System.currentTimeMillis();
36 Bitmap img1=((BitmapDrawable) getResources().getDrawable(R.drawable.lena)).getBitmap();
37 int w=img1.getWidth(),h=img1.getHeight();
38 int[] pix = new int[w * h];
39 img1.getPixels(pix, 0, w, 0, 0, w, h);
40 int[] resultInt=LibImgFun.ImgFun(pix, w, h);
41 Bitmap resultImg=Bitmap.createBitmap(w, h, Config.RGB_565);
42 resultImg.setPixels(resultInt, 0, w, 0, 0,w, h);
43 long performance=System.currentTimeMillis()-current;
44 imgView.setImageBitmap(resultImg);
45 HaveImgFun.this.setTitle("w:"+String.valueOf(img1.getWidth())+",h:"+String.valueOf(img1.getHeight())+"NDK耗时"+String.valueOf(performance)+" 毫秒");
46 } else if(v == btnRestore){
47 Bitmap img2=((BitmapDrawable) getResources().getDrawable(R.drawable.lena)).getBitmap();
48 imgView.setImageBitmap(img2);
49 HaveImgFun.this.setTitle("使用OpenCV进行图像处理");
50 }
51 }
52 }
53 }
点击全部保存,OK,现在可以选择一个Android虚拟机运行看一下效果,配置好Run Configuration然后点击Run,得到下面的结果:
❼ 移植c++下开发的opencv程序到安卓平台运行
首先下载一个android版本的opencv
然后基于NDK编译它里面的一个mixed demo,这个demo实现了获取摄像头图像进行特征点检测。
特征点检测部分,是调用OpenCV的标准C++接口实现的。
❽ 在android中进行opencv开发,请问imshow这个方法在哪个包中,或者已经变了一种说法
imshow不就是图像显示吗,自己看开发文档里图像显示那块不就行了。这种基本的东西tutorial里肯定有
❾ 怎样在eclipse中加载opencv for android
在Android中使用Opencv
使用opencv有两种方式,一种是使用opencv的java版本的API,但是这种方式不是通过本地调用实现的,全部都是java代码,所以这里先不讲,另外一种方式就是使用opencv的c++版本的API,将本地c++代码编译成.so链接库,然后在安卓开发中进行调用,本地cpp代码使用NDK进行编译。
5.1
安卓代码
下面给出一个使用Canny算子检测边缘的本地代码调用的使用方式。
新建安卓项目,配置使用安卓API等信息,这里我的项目名称为HaveImgFun
然后修改界面控制文件res->layout->activity_have_img_fun.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<Button android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:id="@+id/btnNDK"
android:text="使用C++ OpenCV进行处理" />
<Button android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:id="@+id/btnRestore"
android:text="还原" />
<ImageView android:id="@+id/ImageView01"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
</LinearLayout>
在文件夹src下的com.testopencv.haveimgfun包中新建一个类用于包装使用了opencv
c++代码的动态库的导出函数,类名为LibImgFun。
Eclipse会为你创建一个新的文件LibImgFun.java,将里面的内容改为:
package com.testopencv.haveimgfun;
public class LibImgFun {
static {
System.loadLibrary("ImgFun");
}
/**
* @param width the current view width
* @param height the current view height
*/
public static native int[] ImgFun(int[] buf, int w, int h);
}
从上面的代码可以得知,我们的动态库名字应该为“libImgFun.so”,注意"public
static native int[] ImgFun(int[] buf, int w, int h)"中的native关键字,表明这个函数来自native
code。static表示这是一个静态函数,这样就可以直接用类名去调用。
修改功能代码,修改HaveImgFun.java的代码,代码内容如下:
package com.testopencv.haveimgfun;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
import android.graphics.drawable.BitmapDrawable;
import android.os.Bundle;
import android.widget.Button;
import android.view.View;
import android.widget.ImageView;
public class HaveImgFun extends Activity {
/** Called when the activity is first created. */
ImageView imgView;
Button btnNDK, btnRestore;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_have_img_fun);
this.setTitle("使用NDK转换灰度图");
btnRestore = (Button) this.findViewById(R.id.btnRestore);
btnRestore.setOnClickListener(new ClickEvent());
btnNDK = (Button) this.findViewById(R.id.btnNDK);
btnNDK.setOnClickListener(new ClickEvent());
imgView = (ImageView) this.findViewById(R.id.ImageView01);
Bitmap img = ((BitmapDrawable) getResources().getDrawable(
R.drawable.lena)).getBitmap();
imgView.setImageBitmap(img);
}
class ClickEvent implements View.OnClickListener {
public void onClick(View v) {
if (v == btnNDK) {
long current = System.currentTimeMillis();
Bitmap img1 = ((BitmapDrawable) getResources().getDrawable(
R.drawable.lena)).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 = LibImgFun.ImgFun(pix, w, h);
Bitmap resultImg = Bitmap.createBitmap(w, h, Config.RGB_565);
resultImg.setPixels(resultInt, 0, w, 0, 0, w, h);
long performance = System.currentTimeMillis() - current;
imgView.setImageBitmap(resultImg);
HaveImgFun.this.setTitle("w:" + String.valueOf(img1.getWidth())
+ ",h:" + String.valueOf(img1.getHeight()) + "NDK耗时"
+ String.valueOf(performance) + " 毫秒");
} else if (v == btnRestore) {
Bitmap img2 = ((BitmapDrawable) getResources().getDrawable(
R.drawable.lena)).getBitmap();
imgView.setImageBitmap(img2);
HaveImgFun.this.setTitle("使用OpenCV进行图像处理");
}
}
}
}
5.2 C++代码
在项目中新建一个jni文件,用于放置该项目的所有cpp代码。
在jni文件夹下建立一个"ImgFun.cpp"的文件,内容改为下面所示:
#include <jni.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_testopencv_haveimgfun_LibImgFun_ImgFun(
JNIEnv* env, jobject obj, jintArray buf, int w, int h);
JNIEXPORT jintArray JNICALL Java_com_testopencv_haveimgfun_LibImgFun_ImgFun(
JNIEnv* env, jobject obj, jintArray buf, int w, int 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;
}
在上面的代码中,给出了简单的Canny算子检测边缘的代码,并且返回检测后的图像显示。
上面的代码中#include
<jni.h>是必须要包含的头文件,#include
<opencv2/opencv.hpp>是opencv要包含的头文件。
5.3
配置文件
然后再在jni下新建两个文件"Android.mk"文件和"Application.mk"文件,这两个文件事实上就是简单的Makefile文件。
使用NDK进行编译的时候,需要使用Android.mk和Application.mk两个文件。
Android.mk:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
OPENCV_LIB_TYPE:=STATIC
ifeq ("$(wildcard $(OPENCV_MK_PATH))","")
#try to load OpenCV.mk from default install location
include E:\java\OpenCV-2.4.5-android-sdk\sdk\native\jni\OpenCV.mk
else
include $(OPENCV_MK_PATH)
endif
LOCAL_MODULE := ImgFun
LOCAL_SRC_FILES := ImgFun.cpp
include $(BUILD_SHARED_LIBRARY)
Application.mk: APP_STL:=gnustl_static
APP_CPPFLAGS:=-frtti -fexceptions
APP_ABI:=armeabi armeabi-v7a
在Android.mk文件中,需要主要修改的代码是如下一行: include E:\java\OpenCV-2.4.5-android-sdk\sdk\native\jni\OpenCV.mk
这里需要将Android
SDK中的OpenCV.mk文件包含进来,可以使用相对路径或者绝对路径。但是最好不要将Android
SDK放在和工作空间不在一个磁盘分区的地方,这样很容易出错。
然后需要使用LOCAL_SRC_FILES包含需要编译的文件。
5.4
编译本地C++代码
编译本地C++代码可以使用Cygwin进行编译,cd
到项目目录,然后运行ndk-build
也可以使用windows控制台进行编译,同样cd到项目目录,运行ndk-build
还可以使用Eclipse进行编译,建议配置使用Eclipse进行编译,这样当项目的本地cpp代码发生变化的时候就可以实现自动的cpp代码编译,不用每次都在命令行中手动的进行编译,虽然使用黑乎乎的命令行手动编译,输出一堆信息显着很牛逼的样子。
(一下内容,如果使用cygwin进行编译,则不需要进行操作,直接使用cygwin或者命令行进行编译,保证编译通过以后即可运行程序,如果选择使用Eclipse自动进行编译,则参考一下内容进行配置)
首先需要将该项目转换到C++项目,使得该项目具有C++代码属性,如下所述。
点击项目,右击,
New
-> Other -> C/C++ -> Convert to a C/C++ Project .
配置Eclipse对cpp代码进行编译:
首先需要给当前项目添加一个编译环境变量
如下目录
open
Eclipse menu Window -> Preferences -> C/C++ -> Build
-> Environment ,
点击
Add...
添加一个NDKROOT,并且设置值为Android
SDK的根目录。
然后设置编译的一些参数
Project
Properties -> C/C++ Build , uncheck Use
default build command ,
replace “Build command” text from "make"
to
"${NDKROOT}/ndk-build.cmd"
on Windows,
"${NDKROOT}/ndk-build"
on Linux and MacOS.
❿ android opencv需要配置环境变量吗
要想在Android使用OpenCV,那么首先得搭建好开发环境,其实搭建开发环境并不难,只要理解其中的原理就自然手到擒来。开发环境搭建好后才能大展拳脚!
(之前一直是在VS中使用OpenCV,VS中的配置很简单;在Android中配置OpenCV对于刚开始接触Android和Java的人来说,确实很麻烦;刚开始配置时参考的是这位大牛的文章:opencv for android 教程(环境搭建篇),但是之间老是出错,不是他写得有问题,主要是自己没能理解为什么这么做,不知道为什么自然遇到问题就无法变通,二是时间久了,有些东西可能就不一样了!写下这篇文章仅仅是根据前辈的文章和自己的理解,尽量通俗易懂,有什么表述不正确的地方,敬请指正!)
OpenCV4Android 环境配置分3个步骤:
一、Android开发环境配置
二、NDK环境配置
三、使用OpenCV
第一步很简单,开发Android程序的首要条件,网上教程多如牛毛;第二步就是在Android中调用C/C++的所需要的,而OpenCV是C/C++编写的库;第三步其实不能称之为环境配置了,因为前两步已经配置好了环境,第三步仅仅是如何正确的调用OpenCV库了,可以称之为方法篇了。