如何在iPhone上使用OpenCV
很久没有写过关于iPhone的Blog了,这两天Prestudy Lua & OpenCV在iPhone上的应用,就当做个笔记吧。因为Lua很简单,大家直接看这个帖子就可以了:http://www.grzmobile.com/blog/2009/11/13/integrating-lua-into-an-iphone-app.html 没有什么需要特别关注的,很容易就集成成功了。
OpenCV这个有些复杂,大家先仔细看一下下面这个Blog: http://niw.at/articles/2009/03/14/using-opencv-on-iphone/en 但是大家可以按照下面我的步骤进行,因为其中有些地方它写的有些小问题。我先写一下我的开发平台:
硬件:MacBook (2008年买的)这个很重要,因为我的机器装Snow Leopard不能支持64bit,只是32bit的
软件:Snow Leopard 10.6.6
XCode 3.2.5 + SDK4.2
下面这个软件请大家自行下载:
CMake 2.8.4,我推荐大家到这个网站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,如果网速太慢,可以直接去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] 下面就是准备编译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的架构是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上都测试一下。应该可以看到结果的。
[7] 如果我们自己新建一个项目,如何加入已经编译好的opencv库呢?我的做法是:
(a) 新建一个iPhone项目,假设项目目录是:~/opencvtest
(b) 在~/opencvtest目录下面新建下面目录结构:
~/opencv/lib/OpenCV/Simulator
~/opencv/lib/OpenCV/Device
然后把iphone_opencv_test里面opencv_device/和opencv_simulator的include,lib目录拷贝到对应的Device和Simulator目录下面。
(c) 最关键的来了。大家知道要能编译过,我们需要添加头文件include目录和库的支持。大家也注意到Simulator和Device目录里面的东西是同名的,而且支持的一个是simulator,一个是device。于是我用一个策略。Simulator选择debug,Device选择Release。然后大家可以在对应的头文件支持和库文件支持。
头文件: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
大家对应填Simulator 和 Device。
(d) 如果你需要编译simulator版本,请加上Accerlator.Framework的支持。这个Framework就是加速你的向量计算的。不过因为iOS 3.0没有这个Framework,所以如果你要在iOS 3.x的真机上实验的话,请删除这个库。
OpenCV For iPhone的一些问题
速度。这个有一些朋友提到过,还是比较慢的。原因有一下几个:
(1) OpenCV没有为arm体系结构做过优化;
(2) iPhone特别是老版本的iPhone,CPU还是没有强劲到这等地步的。