安装目录opencv for android 教程(环境搭建篇)
這幾周朋友幾篇文章介紹了改安裝目錄的文章. 關(guān)聯(lián)文章的地址
? ?
????最近android開發(fā)異常熾熱,隨著手機(jī)性能越來越高,圖像處程序也越來越重要,
????由于opencv for android 網(wǎng)上教程大多為英文文檔,中文教程都為零碎篇章,
????很少有完全的opencv for android 教程
????博主最近正在學(xué)習(xí)opencv for android 其中走了很多彎路
????所以將一些經(jīng)驗(yàn)寫下 幫助大家少走彎路!
????只合適初學(xué)者 請大神教正,或者繞道吧,走好不送!
????注意本文只擔(dān)任環(huán)境的搭建 不擔(dān)任講授
????按照文章來確保能搭建一個完美的opencv for android 的開發(fā)環(huán)境
? ?
????但是詳細(xì)的理解 須要讀者自己實(shí)驗(yàn)和摸索!
????win7/win8 環(huán)境
????我是win8環(huán)境
????java SDK 6 / 7 ? ? ?
?
????我是用的6
????eclipse for java EE IED
????我是32位版
????ADT插件
????CDT插件
????Android SDK
????Android NDK
????我的是r8版
????cygwin
????Sequoyah
????opencv for android
????我用的是2.4.5
????
如果你還沒有JDK的話,可以去這里下載,接下來的工作就是安裝提示一步一步走。設(shè)置環(huán)境變量步調(diào)如下:
????
????
安裝實(shí)現(xiàn)當(dāng)前,可以在檢查JDK是否安裝成功。打開cmd窗口,輸入java –version 查看JDK的版本信息。涌現(xiàn)相似下面的畫面表示安裝成功了:
????
? ?
????1.下載
????2.解壓到任意目錄
????3.去目錄啟動
????4.設(shè)置工作路徑
????5.安裝實(shí)現(xiàn)
????
在Android Developers下載android-sdk_r05-windows.zip,下載實(shí)現(xiàn)后解壓到任意路徑。
????
- 運(yùn)行SDK Setup.exe,點(diǎn)擊Available Packages。如果沒有涌現(xiàn)可安裝的包,請點(diǎn)擊Settings,選中Misc中的"Force https://..."這項(xiàng),再點(diǎn)擊Available Packages 。
- 選擇希望安裝的SDK及其文檔或者其它包,點(diǎn)擊Installation Selected、Accept All、Install Accepted,開始下載安裝所選包
- 在用戶變量中新建PATH值為:Android SDK中的tools絕對路徑(本機(jī)為D:\AndroidDevelop\android-sdk-windows\tools)。
????
????
????
進(jìn)入cmd命令窗口,檢查SDK是不是安裝成功。?運(yùn)行 android –h 如果有相似以下的輸出,標(biāo)明安裝成功:
????
????ADT是專門給eclipse開發(fā)android的插件
????
????
- 打開 Eclipse IDE,進(jìn)入菜單中的 "Help" -> "Install New Software"
- 點(diǎn)擊Add...按鈕,彈出對話框要求輸入Name和Location:Name自己隨意取,Location輸入http://dl-ssl.google.com/android/eclipse。如下圖所示:
????
????
????然后就是按提示一步一步next。
????
????
實(shí)現(xiàn)當(dāng)前:
????
- 選擇Window > Preferences...
- 在左邊的面板選擇Android,然后在右側(cè)點(diǎn)擊Browse...并選中SDK路徑,本機(jī)為:?
D:\AndroidDevelop\android-sdk-windows - 點(diǎn)擊Apply、OK。配置實(shí)現(xiàn)。
????
創(chuàng)建android AVD模擬器:
android AVD模擬器是一個android的虛擬機(jī)用來在pc機(jī)上調(diào)試android程序用的! 至于如何創(chuàng)建 這里就不說了 因?yàn)槲覒?yīng)用真機(jī)調(diào)試所以沒有用這個以上 android 的開發(fā)環(huán)境就搭建終了了 如果有任何問題請自行g(shù)oogle,這個資料太多了! 總會有一個合適你
NDK + Cygwin 環(huán)境搭建:
參考1: 點(diǎn)擊打開鏈接 參考2: 點(diǎn)擊打開鏈接安裝Android NDK:
1.下載Android NDK 我下載的是 r8版本 地址就不給除了 自己google吧 2.解壓到任意目錄 我解壓的目錄是e:/IDE/ 下 3.實(shí)現(xiàn)安裝Cygwin:
Cygwin 是一個將c++代碼編譯成os動態(tài)庫的東西, 而os庫就可以給java調(diào)用了 這里可能你有困惑 opencv for android 不是有java的API了么 怎么還要用c++ 嗯 只能說JAVA的API還不是很全面 有些東西還是會用到c++的API才行 所以這個是必須的 還有一些有說NDK r8 不須要Cygwin了 但是我不知道怎么弄 我現(xiàn)在還是應(yīng)用這個的由于NDK開發(fā)大都涉及到C/C++在GCC環(huán)境下編譯、運(yùn)行,所以在Windows環(huán)境下,須要模擬Linux模擬編譯環(huán)境,下載地址:
http://www.cygwin.com/
下載后是個setup.exe文件,應(yīng)用進(jìn)程如下:
第一步:運(yùn)行setup程序,第一步圖略,直接點(diǎn)擊Next進(jìn)入下一步。
第二步:選擇安裝方法,第一次可以采取Direct Connection在線下載安裝,如有現(xiàn)成的離線包,可以選擇離線安裝(Install from Local Directory)。
?
第四步:設(shè)置本地包暫存路徑
暫存目錄默許是放到setup.exe的同級目錄下,下載后名字相似ftp%3a%2f%2fcygwin.mirrors.pair.com%2f這樣格式。
第五步:設(shè)置網(wǎng)絡(luò)連接方法
第六步:選擇下載站點(diǎn)地址
起初實(shí)驗(yàn)幾個看哪個速度快就用哪個地址(如果感到不快就點(diǎn)取消,再次來過)。
?
第七步:等待加載安裝項(xiàng)載入,選擇安裝項(xiàng)
我們編譯NDK,在默許設(shè)置下,只要選擇Devel(點(diǎn)擊列表中Devel,將前面的Default改成Install,圖中箭頭所示),其它均為默許狀態(tài)。
?
第八步:等待下載實(shí)現(xiàn)
下載實(shí)現(xiàn)時光決定于你選擇的安裝包數(shù)量及網(wǎng)絡(luò)連接速度,比如按照本文默許的選擇方法,可能須要4-5個小時,下載后壓縮包約750M,下載實(shí)現(xiàn)后會自動安裝到上文設(shè)置的安裝目錄。
安裝實(shí)現(xiàn)后,先運(yùn)行Cygwin一次(Cygwin.bat),以便創(chuàng)建一些用戶環(huán)境文件,分離輸入:
make -v
和,
gcc -v
如果檢測成功,會有make和gcc相關(guān)版本信息打印出來,如下圖。
????
????
????
可以在cygwin中通過vim修改,也可以在windows安裝目錄中修改 home\<你的用戶名>\.bash_profile 文件中最后添加環(huán)境變量
NDKROOT=/cygdrive/e/Andriod/develop/android-ndk-r8
export NDKROOT
其中NDK=/cygdrive/<你的盤符>/<android ndk 目錄> ,"NDK"這個名字隨意起,當(dāng)前經(jīng)常用不要太長。
重啟cygwin,輸入:
cd $NDK
可進(jìn)入ndk對應(yīng)目錄說明設(shè)置OK。
3.用ls命令查看libs/armeabi/下是否生成了so文件,有l(wèi)ibhello-jni.so說明ndk運(yùn)行正常。
$ ls libs/armeabi/
gdb.setup gdbserver libhello-jni.so
也可以到E:\android\android-ndk-r8\samples\hello-jni\libs\armeabi目錄下看有沒有生成的.so文件。
2)導(dǎo)入NDK的hello-jni示例到Eclipse中
1.在Eclipse中新建一個Android工程HelloJni。
在Create Android Project時勾選“Create project from existing source”,Location中填E:\android\android-ndk-r8\samples\hello-jni
2.直接以Android Aplication運(yùn)行com.example.hellojni.HelloJni項(xiàng)目。要先有.so文件才能運(yùn)行起來。 os放在工程根目錄下
CDT插件的安裝:
????
CDT是eclipse開發(fā)c++用的插件????
CDT插件可以在一個工程中同時開發(fā)基于C/C++的Native代碼和基于Java的代碼,加上Sequoyah插件可以一次編譯兩部分代碼。下載地址:http://www.eclipse.org/cdt/downloads.php不同eclipse版本要下載對應(yīng)的包,否則安裝不了。
Help-->About Eclipse 下可以看到自己用的版本,我的是 Version: Helios Service Release 2 即Helios版本
http://www.eclipse.org/downloads/download.php?file=/tools/cdt/releases/helios/dist/cdt-master-7.0.2.zip
cdt-master-7.0.2.zip:這個是CDT的離線安裝包。(由于文件比較大推薦應(yīng)用離線包,7.0.2的54.8M,8.1.1的103MB)
安裝:Eclipse -> Help -> Install New Software,點(diǎn)擊add。
Name:CDT_版本。
Location:點(diǎn)擊Archive,定位到下載的“cdt-master-7.0.2.zip”文件。
如果Location的下面涌現(xiàn)“Duplicate location”錯誤,請到Window -> preferences -> Install/Update -> Avaliable Software Site中找到remove掉。
如果涌現(xiàn)缺少eclipse包說明你下載的版本和eclipse版本不匹配,從新下載匹配的從新安裝就可以了。
????
????
????
????
另外須要重啟eclipse后才生效。安裝實(shí)現(xiàn)重啟后,在Eclispe中新建一個項(xiàng)目,如果涌現(xiàn)了C/C++項(xiàng)目,則標(biāo)明CDT插件安裝成功了。
????
????
????
安裝Sequoyah插件:
????
Sequoyah插件用于設(shè)置Android工程對Native開發(fā)的支持。官方網(wǎng)址:http://www.eclipse.org/sequoyah/downloads/
打開上面網(wǎng)址就可以看到詳細(xì)的安裝說明了
Location:http://download.eclipse.org/sequoyah/updates/2.0/
For Helios SR2 Sequoyah version: http://download.eclipse.org/sequoyah/updates/1.0.2/
注:只是安裝1.0.2的沒有出來“本機(jī)開發(fā)”的配置所以沒法用,本人從新安裝了2.0的可以了,這個應(yīng)該直接安裝最新版2.0的就可以了。
在安裝界面不要勾選“Group items by category”復(fù)選框,選中涌現(xiàn)了列表為空(There are no categorized items)的情況。
在“window –> preferences ->Android -> 本機(jī)開發(fā)”中添加NDK的路徑。
????
????
????
這個插件安裝后也須要重啟eclipse的重啟后右鍵之前建立的“HelloJni”項(xiàng)目,在“Android Tools”選項(xiàng)中包含“Add Native Support…”選項(xiàng)即成功。
????
每日一道理
正所謂“學(xué)海無涯”。我們正像一群群魚兒在茫茫的知識之海中跳躍、 嬉戲,在知識之海中出生、成長、生活。我們離不開這維持生活的“海水”,如果跳出這個“海洋”,到“陸地”上去生活,我們就會被無情的“太陽”曬死。
opecnv for android 開發(fā)環(huán)境搭建:
參考1: 點(diǎn)擊打開鏈接 參考2: 點(diǎn)擊打開鏈接opencv for android SDK 安裝:
進(jìn)入官網(wǎng)(http://opencv.org/)下載OpenCV4Android并解壓,其目錄結(jié)構(gòu)如下:
其中,sdk目錄即是我們開發(fā)opencv所須要的類庫;samples目錄中存放著多少opencv應(yīng)用示例(包括人臉檢測等),可為我們進(jìn)行android下的opencv開發(fā)提供參考;doc目錄為opencv類庫的應(yīng)用說明及api文檔等;而apk目錄則存放著對應(yīng)于各內(nèi)核版本的OpenCV_2.4.3.2_Manager_2.4應(yīng)用安裝包。此應(yīng)用用來管理手機(jī)設(shè)備中的opencv類庫,在運(yùn)行opencv應(yīng)用之前,必須確保手機(jī)中已安裝了OpenCV_2.4.3.2_Manager_2.4_*.apk,否則opencv應(yīng)用將會因?yàn)闊o法加載opencv類庫而無法運(yùn)行。
2.2 將SDK引入工作空間
??????? (1) 選擇一個路徑,新建文件夾做為工作空間(我在E盤根目錄下新建workspace目錄來做為工作空間);
??????? (2) 將OpenCV-2.4.3.2-android-sdk中的sdk目錄copy至工作空間,并將其更名為OpenCV-SDK(是否更改名稱無所謂,這是我個人習(xí)氣而已);
??????? (3) 以新建的目錄為工作空間,打開eclipse;
??????? (4) 將OpenCV-SDK引入到工作空間中,如下圖所示:
應(yīng)用java API開發(fā)android:
創(chuàng)建工程
??????? (1) 打開eclipse,創(chuàng)建android應(yīng)用工程GrayProcess;
??????? (2) 將測試圖像lena.jpg添加到資源目錄res/drawable-hdpi中;
??????? (3) 在Package Explorer中選擇項(xiàng)目GrayProcess,單擊右鍵在彈出菜單中選擇Properties,然后在彈出的Properties窗口中左側(cè)選擇Android,然后點(diǎn)擊右下方的Add按鈕,選擇OpenCV Library 2.4.3并點(diǎn)擊OK,操縱實(shí)現(xiàn)后,會將OpenCV類庫添加到GrayProcess的Android Dependencies中,如下圖所示:
(1) 字符串資源文件:strings.xml
<resources><string name="app_name">GrayProcess</string><string name="hello_world">Hello world!</string><string name="menu_settings">Settings</string><string name="title_activity_main">MainActivity</string><string name="str_proc">gray process</string><string name="str_desc">image description</string></resources> (2) 布局文件:main.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:orientation="vertical"android:layout_width="match_parent"android:layout_height="match_parent" ><Button android:id="@+id/btn_gray_process"android:layout_width="fill_parent"android:layout_height="wrap_content"android:text="@string/str_proc"/><ImageViewandroid:id="@+id/image_view"android:layout_width="wrap_content"android:layout_height="wrap_content"android:contentDescription="@string/str_proc"/></LinearLayout>
? (3) MainActivity.java package com.iron.grayprocess;import org.opencv.android.BaseLoaderCallback; import org.opencv.android.LoaderCallbackInterface; import org.opencv.android.OpenCVLoader; import org.opencv.android.Utils; import org.opencv.core.Mat; import org.opencv.imgproc.Imgproc;import android.os.Bundle; import android.app.Activity; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Bitmap.Config; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.ImageView;public class MainActivity extends Activity implements OnClickListener{private Button btnProc;private ImageView imageView;private Bitmap bmp;//OpenCV類庫加載并初始化成功后的回調(diào)函數(shù),在此我們不進(jìn)行任何操縱private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) {@Overridepublic void onManagerConnected(int status) {switch (status) {case LoaderCallbackInterface.SUCCESS:{} break;default:{super.onManagerConnected(status);} break;}}};@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);btnProc = (Button) findViewById(R.id.btn_gray_process);imageView = (ImageView) findViewById(R.id.image_view);//將lena圖像加載程序中并進(jìn)行表現(xiàn)bmp = BitmapFactory.decodeResource(getResources(), R.drawable.lena);imageView.setImageBitmap(bmp);btnProc.setOnClickListener(this);}@Overridepublic void onClick(View v) {Mat rgbMat = new Mat();Mat grayMat = new Mat();//獲得lena黑色圖像所對應(yīng)的像素?cái)?shù)據(jù)Utils.bitmapToMat(bmp, rgbMat);//將黑色圖像數(shù)據(jù)轉(zhuǎn)換為灰度圖像數(shù)據(jù)并存儲到grayMat中Imgproc.cvtColor(rgbMat, grayMat, Imgproc.COLOR_RGB2GRAY);//創(chuàng)建一個灰度圖像Bitmap grayBmp = Bitmap.createBitmap(bmp.getWidth(), bmp.getHeight(), Config.RGB_565);//將矩陣grayMat轉(zhuǎn)換為灰度圖像Utils.matToBitmap(grayMat, grayBmp);imageView.setImageBitmap(grayBmp);}@Overridepublic void onResume(){super.onResume();//通過OpenCV引擎服務(wù)加載并初始化OpenCV類庫,所謂OpenCV引擎服務(wù)即是//OpenCV_2.4.3.2_Manager_2.4_*.apk程序包,存在于OpenCV安裝包的apk目錄中OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_3, this, mLoaderCallback);} }
3.1.3 運(yùn)行結(jié)果 ? ? ? ?
應(yīng)用 c++ API開發(fā)android:
創(chuàng)建工程???????
??????? 步調(diào)如工程一,創(chuàng)建新工程GrayProcess2,將lena.jpg添加到資源文件,并按上面所示將opencv類庫添加到工程中。
編寫下層代碼(java)
(1)Stings.xml
<resources><string name="app_name">GrayProcess2</string><string name="hello_world">Hello world!</string><string name="menu_settings">Settings</string><string name="title_activity_main">GrayProcess2</string><string name="str_proc">gray process</string><string name="str_desc">image description</string> </resources> (2)main.xml?
?
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:orientation="vertical"android:layout_width="match_parent"android:layout_height="match_parent" ><Button android:id="@+id/btn_gray_process"android:layout_width="fill_parent"android:layout_height="wrap_content"android:text="@string/str_proc"/><ImageViewandroid:id="@+id/image_view"android:layout_width="wrap_content"android:layout_height="wrap_content"android:contentDescription="@string/str_proc"/></LinearLayout>(3)MainActivity.java
?
?
package com.iron.grayprocess2;import org.opencv.android.BaseLoaderCallback; import org.opencv.android.LoaderCallbackInterface; import org.opencv.android.OpenCVLoader; import android.os.Bundle; import android.app.Activity; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Bitmap.Config; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.ImageView;public class MainActivity extends Activity implements OnClickListener{private Button btnProc;private ImageView imageView;private Bitmap bmp;//OpenCV類庫加載并初始化成功后的回調(diào)函數(shù),在此我們不進(jìn)行任何操縱private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) {@Overridepublic void onManagerConnected(int status) {switch (status) {case LoaderCallbackInterface.SUCCESS:{System.loadLibrary("image_proc");} break;default:{super.onManagerConnected(status);} break;}}};@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);btnProc = (Button) findViewById(R.id.btn_gray_process);imageView = (ImageView) findViewById(R.id.image_view);//將lena圖像加載程序中并進(jìn)行表現(xiàn)bmp = BitmapFactory.decodeResource(getResources(), R.drawable.lena);imageView.setImageBitmap(bmp);btnProc.setOnClickListener(this);}@Overridepublic void onClick(View v) {int w = bmp.getWidth();int h = bmp.getHeight();int[] pixels = new int[w*h]; bmp.getPixels(pixels, 0, w, 0, 0, w, h);int[] resultInt = ImageProc.grayProc(pixels, w, h);Bitmap resultImg = Bitmap.createBitmap(w, h, Config.ARGB_8888);resultImg.setPixels(resultInt, 0, w, 0, 0, w, h);imageView.setImageBitmap(resultImg); }@Overridepublic void onResume(){super.onResume();//通過OpenCV引擎服務(wù)加載并初始化OpenCV類庫,所謂OpenCV引擎服務(wù)即是//OpenCV_2.4.3.2_Manager_2.4_*.apk程序包,存在于OpenCV安裝包的apk目錄中OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_3, this, mLoaderCallback);} }?代碼第28行:System.loadLibrary("image_proc")用來當(dāng)OpenCV類庫初始化實(shí)現(xiàn)后加載類庫image_proc。此類庫由我們來生成,用于實(shí)現(xiàn)圖像灰度處理的操縱,此部分將在下面中說明。
?
??(4) ImageProc.java
?
package com.iron.grayprocess2;public class ImageProc {public static native int[] grayProc(int[] pixels, int w, int h); }?
?
編寫JNI及C相關(guān)代碼
????????在項(xiàng)目中新建目錄jni,在jni目錄中分離添加文件Android.mk,Application.mk,ImageProc.h,ImageProc.cpp,這四個文件的內(nèi)容分離如下所示。
??????? (1) Android.mk
?
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) include ../OpenCV-SDK/native/jni/OpenCV.mk LOCAL_SRC_FILES := ImageProc.cpp LOCAL_MODULE := image_proc include $(BUILD_SHARED_LIBRARY)?
代碼說明:
第一行:指明當(dāng)前編譯路徑;
第二行:清空變量;
第三行:將OpenCV類庫中的編譯文件包含進(jìn)來,如此一來在我們的工程中即可應(yīng)用OpenCV類庫;
第四行:指定須要編譯的C++源文件;
第五行:指定編譯生成的類庫名稱;
第六行:調(diào)用命令將源文件編譯為靜態(tài)庫。
注:第三行指定的路徑很關(guān)鍵,當(dāng)opencv類庫與工程路徑相關(guān)位置產(chǎn)生改變時,此路徑也要隨之改變。
(2) Application.mk(配置文件)
?
APP_STL := gnustl_static APP_CPPFLAGS := -frtti -fexceptions APP_ABI := armeabi-v7a APP_PLATFORM := android-8?
?
#include <ImageProc.h> #include <opencv2/core/core.hpp> #include <string> #include <vector>using namespace cv; using namespace std;JNIEXPORT jintArray JNICALL Java_com_iron_grayprocess2_ImageProc_grayProc(JNIEnv* env, jclass obj, jintArray buf, jint w, jint h){jint *cbuf;cbuf = env->GetIntArrayElements(buf, false);if(cbuf == NULL){return 0;}Mat imgData(h, w, CV_8UC4, (unsigned char*)cbuf);uchar* ptr = imgData.ptr(0);for(int i = 0; i < w*h; i ++){//計(jì)算公式:Y(亮度) = 0.299*R + 0.587*G + 0.114*B//對于一個int四字節(jié),其黑色值存儲方法為:BGRAint grayScale = (int)(ptr[4*i+2]*0.299 + ptr[4*i+1]*0.587 + ptr[4*i+0]*0.114);ptr[4*i+1] = grayScale;ptr[4*i+2] = grayScale;ptr[4*i+0] = grayScale;}int size=w * h;jintArray result = env->NewIntArray(size);env->SetIntArrayRegion(result, 0, size, cbuf);env->ReleaseIntArrayElements(buf, cbuf, 0);return result; }?
說明:
- ImageProc.h頭文件可以通過jdk提供的工具javah來生成,詳細(xì)生成方法在下面
- JNI中的定義的函數(shù)遵循必定的命名規(guī)則:Java_包名_類名_方法名,詳細(xì)參考JNI編程相關(guān)知識;
- ImageProc.cpp中利用黑色值轉(zhuǎn)換為灰度值的計(jì)算公式,將lena.jpg圖像的每一個像素轉(zhuǎn)換為灰度值,并返回給應(yīng)用層。須要注意的是對于 ARGB_8888類型的圖像而言,其每一個像素值在int型數(shù)據(jù)中的存儲序列為BGRA。 還須要注 ImageProc.cpp 這個文件 第10行的函數(shù)名稱Java_包名_類名_方法名 請修改成.h 文件生成的那個函數(shù)名?
1.首先當(dāng)年寫完ImageProc.java 這個保存 當(dāng)前 eclipse會自動幫你生成 java 的class文件
? ?你可以再工程目錄--》 bin --》classes -》com -------。。。。。 的文件里找到
? ?比如我的 在E:\work\op\OpenCV-2.4.5-android-sdk\samples\Test2\bin\classes\com\test2\test2 這個路徑下
如圖
2.將classes文件拷貝到e盤根目錄下
然后打開 cmd?
e:
cd classes
javah com.test2.test2.ImageProc
然后就會在classes文件里找到一個 xxx.的頭文件 如圖
你可以將這個頭文件改成任意名字 比如我們上面的ImageProc.h 然后放入工程目錄的jni中
編譯運(yùn)行方法有兩種
1 配置eclipse自動運(yùn)行
第一步:轉(zhuǎn)換工程。點(diǎn)擊“文件 -> 新建 -> 其他”(快捷鍵:Ctrl+N)。選擇“C/C++”下的“Convert to a C/C++ Project(Adds C/C++ Nature)”。進(jìn) 入“下一步”。
第二步:選中你剛才建的“HelloJni”工程,下面左邊選“Makefile project”右側(cè)選“Cygwin GCC”。肯定后提示的“透視圖”不清楚是什么,點(diǎn)擊“是”即可。
第三步:在“HelloJni”工程上右鍵,選擇“屬性”。配置“C/C++ Build”和“C/C++ General -> Paths and Symbols”。
C/C++ Build:點(diǎn)擊“C/C++ Build”,在右側(cè)的“Builder Settings”中去掉默許勾選的“Use default build command”復(fù)選框。設(shè)置Build command為“
${NDKROOT}/ndk-build.cmd "
C/C++ General -> Paths and Symbols:在Includes下add新的GNU C依賴路徑。此“HelloJni”工程須要“D:\Java\android-ndk-r8\platforms\android-8\arch-arm\usr\include”即可,當(dāng)前根據(jù)不同項(xiàng)目選擇不同的依賴庫。
這里只要是你cpp文件里面文件包含目錄
你可以直接在NDK 和opencv jni那個目錄下搜索頭文件名 然后看看在那個路徑有
配置好后運(yùn)行就行了
?
2.手動應(yīng)用Cygwin 生成os 然后運(yùn)行
?由于程序中涉及到了JNI編程,因此須要用cygwin對其中的C/C++代碼進(jìn)行編譯。打開cygwin,進(jìn)入到工程的根目錄中執(zhí)行命令:$NDKROOT/ndk-build實(shí)現(xiàn)相關(guān)編譯;當(dāng)前在eclipse中刷新工程GrayProcess2,運(yùn)行即可。編譯及運(yùn)行結(jié)果分離如下所示。? ??
到這里兩種方法都結(jié)束了!
有問題請留言
或者279291014@qq.com
?
文章結(jié)束給大家分享下程序員的一些笑話語錄: Borland說我很有前途,Sun笑了;Sun說我很有錢,IBM笑了;IBM說我很專業(yè),Sybase笑了;Sybase說我數(shù)據(jù)庫很牛,Oracle笑了;Oracle說我是開放的,Linux笑了;Linux說我要打敗Unix,微軟笑了;微軟說我的系統(tǒng)很穩(wěn)定,我們都笑了。
總結(jié)
以上是生活随笔為你收集整理的安装目录opencv for android 教程(环境搭建篇)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。