如何在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还是没有强劲到这等地步的。

相关推荐