導航:首頁 > 操作系統 > 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開發相關的資料

熱點內容
南昌哪些地方需要程序員 瀏覽:756
三台伺服器配置IP地址 瀏覽:173
如何用命令方塊連續對話 瀏覽:275
win7linux共享文件夾 瀏覽:302
命令符打開本地服務 瀏覽:599
android應用程序源碼 瀏覽:700
安卓開發工程師簡歷怎麼寫 瀏覽:59
熱水器水量伺服器是什麼意思 瀏覽:115
stk衛星編譯 瀏覽:480
對後台程序員的要求 瀏覽:761
ios大文件夾圖標 瀏覽:624
生的計劃pdf 瀏覽:713
oppoa93加密便簽在哪查找 瀏覽:21
兩個數字的加減乘除運算編程 瀏覽:227
給手機加密碼忘記了怎麼辦 瀏覽:601
單片機運算符 瀏覽:297
移動端微信商城源碼 瀏覽:444
編程貓下一個背景在哪裡 瀏覽:359
javaclasstype 瀏覽:240
樂高編程和樂高課的延伸 瀏覽:357