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