在iPhone上使用OpenCV
在iPhone上使用OpenCV是本文要介紹的內(nèi)容,很久沒(méi)有寫(xiě)過(guò)關(guān)于iPhone的Blog了,這兩天Prestudy Lua & OpenCV在iPhone上的應(yīng)用,就當(dāng)做個(gè)筆記吧。因?yàn)長(zhǎng)ua很簡(jiǎn)單,大家直接看這個(gè)帖子就可以了:
http://www.grzmobile.com/blog/2009/11/13/integrating-lua-into-an-iphone-app.html 沒(méi)有什么需要特別關(guān)注的,很容易就集成成功了。
OpenCV這個(gè)有些復(fù)雜,大家先仔細(xì)看一下下面這個(gè)Blog: http://niw.at/articles/2009/03/14/using-opencv-on-iphone/en 但是大家可以按照下面我的步驟進(jìn)行,因?yàn)槠渲杏行┑胤剿鼘?xiě)的有些小問(wèn)題。我先寫(xiě)一下我的開(kāi)發(fā)平臺(tái):
硬件:MacBook (2008年買(mǎi)的)這個(gè)很重要,因?yàn)槲业臋C(jī)器裝Snow Leopard不能支持64bit,只是32bit的
軟件:Snow Leopard 10.6.6
- XCode 3.2.5 + SDK4.2
下面這個(gè)軟件請(qǐng)大家自行下載:
CMake 2.8.4,我推薦大家到這個(gè)網(wǎng)站http://www.cmake.org/cmake/resources/software.html下載,請(qǐng)不要使用sudo port install cmake,因?yàn)檫@樣會(huì)裝2.6.x版本的,可能會(huì)影響你的編譯。
接下來(lái)的步驟大家可以按照我寫(xiě)的一步步進(jìn)行:
[1] git clone git://github.com/niw/iphone_opencv_test.git,如果網(wǎng)速太慢,可以直接去https://github.com/niw/iphone_opencv_test下載一個(gè)***版本的zip包。
[2] 進(jìn)入iphone_opencv_test目錄(就是git或者下載zip包解壓的目錄)。然后下載OpenCV-2.1.0。然后把下載下來(lái)的OpenCV-2.1.0在iphone_opencv_test目錄里面解壓,命令是:tar jvxf opencv-2.1.0.tar.bz2。
[3] 進(jìn)入OpenCV-2.1.0目錄,運(yùn)行patch -p1 < ../OpenCV-2.1.0.patch。這個(gè)命令其實(shí)就是修改OpenCV的Makefile使其支持iPhone。
[4] 下面就是準(zhǔn)備編譯simulator版本了
- % cd .. # 回到iphone_opencv_test目錄
- % mkdir build_simulator 不要用別的名字,等下好編譯例子文件
- % cd build_simulator
- % export SDK_VERSION=4.2
- % export IPHONEOS_VERSION_MIN=3.0
- %export CMAKE_OSX_ARCHITECTURES=i386
- % ../opencv_cmake.sh Simulator ../OpenCV-2.1.0
- % make -j 4
- % make install
注意上面三個(gè)export命令,前兩個(gè)很明顯。因?yàn)槲蚁M业?strong>OpenCV***可以支持iOS3.0,注意第三個(gè)export,這個(gè)命令是告訴cmake我的simulator的架構(gòu)是i386(這很明顯嘛,我的simulator是跑在MacBook的CPU上面的)。
[5] 下面是編譯Device版本了。
- % cd .. # 回到iphone_opencv_test目錄
- % mkdir build_device #不要用別的名字,等下好編譯例子文件
- % cd build_device
- % export SDK_VERSION=4.2
- % export IPHONEOS_VERSION_MIN=3.0
- %export CMAKE_OSX_ARCHITECTURES=armv6
- % ../opencv_cmake.sh Device ../OpenCV-2.1.0
- % make -j 4
- % make install
[6] 打開(kāi)iphone_opencv_test的測(cè)試project文件,然后在simulator和device上都測(cè)試一下。應(yīng)該可以看到結(jié)果的。
[7] 如果我們自己新建一個(gè)項(xiàng)目,如何加入已經(jīng)編譯好的opencv庫(kù)呢?我的做法是:
(a) 新建一個(gè)iPhone項(xiàng)目,假設(shè)項(xiàng)目目錄是:~/opencvtest
(b) 在~/opencvtest目錄下面新建下面目錄結(jié)構(gòu):
- ~/opencv/lib/OpenCV/Simulator
- ~/opencv/lib/OpenCV/Device
然后把iphone_opencv_test里面opencv_device/和opencv_simulator的include,lib目錄拷貝到對(duì)應(yīng)的Device和Simulator目錄下面。
(c) 最關(guān)鍵的來(lái)了。大家知道要能編譯過(guò),我們需要添加頭文件include目錄和庫(kù)的支持。大家也注意到Simulator和Device目錄里面的東西是同名的,而且支持的一個(gè)是simulator,一個(gè)是device。于是我用一個(gè)策略。Simulator選擇debug,Device選擇 Release。然后大家可以在對(duì)應(yīng)的頭文件支持和庫(kù)文件支持。
頭文件:Header Search Path: $(SRCROOT)/lib/OpenCV/Simulator/include/opencv/ 和 $(SRCROOT)/lib/OpenCV/Simulator/include/
庫(kù)文件:-lstdc++
- -lz
- $(SRCROOT)/lib/OpenCV/Simulator/lib/libcxcore.a
- $(SRCROOT)/lib/OpenCV/Simulator/lib/libcv.a
大家對(duì)應(yīng)填Simulator 和 Device。
(d) 如果你需要編譯simulator版本,請(qǐng)加上Accerlator.Framework的支持。這個(gè)Framework就是加速你的向量計(jì)算的。不過(guò)因?yàn)閕OS 3.0沒(méi)有這個(gè)Framework,所以如果你要在iOS 3.x的真機(jī)上實(shí)驗(yàn)的話,請(qǐng)刪除這個(gè)庫(kù)。
OpenCV For iPhone的一些問(wèn)題
速度。這個(gè)有一些朋友提到過(guò),還是比較慢的。原因有一下幾個(gè):
(1) OpenCV沒(méi)有為arm體系結(jié)構(gòu)做過(guò)優(yōu)化;
(2) iPhone特別是老版本的iPhone,CPU還是沒(méi)有強(qiáng)勁到這等地步的。
小結(jié):關(guān)于在iPhone上使用OpenCV的內(nèi)容介紹完了,希望本文對(duì)你有所幫助!























