导航:首页 > 操作系统 > opencvandroid开发

opencvandroid开发

发布时间:2022-05-25 00:20:01

❶ 如何将自己编写的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库了,可以称之为方法篇了。

阅读全文

与opencvandroid开发相关的资料

热点内容
产品经理和程序员待遇 浏览:439
解忧程序员免费阅读 浏览:106
录像免压缩 浏览:504
总结所学过的简便算法 浏览:360
南昌哪些地方需要程序员 浏览:759
三台服务器配置IP地址 浏览:173
如何用命令方块连续对话 浏览:278
win7linux共享文件夹 浏览:304
命令符打开本地服务 浏览:599
android应用程序源码 浏览:703
安卓开发工程师简历怎么写 浏览:61
热水器水量服务器是什么意思 浏览:117
stk卫星编译 浏览:480
对后台程序员的要求 浏览:761
ios大文件夹图标 浏览:626
生的计划pdf 浏览:714
oppoa93加密便签在哪查找 浏览:21
两个数字的加减乘除运算编程 浏览:227
给手机加密码忘记了怎么办 浏览:601
单片机运算符 浏览:297