在Xcode中搭建OpenCV开发环境


OpenCV是一个开源的图像处理工具,并且具有跨平台的特性。以前,在Visual Studio 2012中做过OpenCV的开发环境配置。记得当时,在Windows下配置OpenCV资料挺多的,而且安装过程很顺利,没遇到什么问题。


一次偶然的机遇使我加入到了Mac的世界,于是开始研究起苹果系统来。由于,平时的主要语言是Java,所以一开始就把MyEclipse环境搭建好了。后来想起来以前还接触过OpenCV,于是也想在苹果系统下再搭建一套OpenCV的开发环境。找了很多资料,初步确定在Xcode环境中来进行OpenCV开发环境的搭建。


准备工作

由于OpenCV下载下来的是源码,不能直接用,需要编译。编译的话,用到了CMake工具。如果电脑里面没有这个工具的话,需要安装一个。有人推荐使用Homebrew来进行在线安装,类似于CentOS里面的yum。但是在Mac系统下,Homebrew和系统自身的一个软件管理工具有冲突,安装前需要先把系统自带的那个软件管理工具卸载掉,个人觉得比较麻烦。所以,我推荐直接使用DMG包来进行安装。当前最新版本为2.8.12.2,包里面直接是二进制可执行文件,无需再次编译,下载地址:http://www.cmake.org/files/v2.8/cmake-2.8.12.2-Darwin64-universal.dmg


安装完CMake之后,接着下载OpenCV ZIP包,目前最新的版本是2.4.8,地址:http://sourceforge.net/projects/opencvlibrary/files/opencv-unix/2.4.8/opencv-2.4.8.zip/download


安装OpenCV

双击下载完成的OpenCV Zip包即自动解压了,进入解压之后的OpenCV文件夹,然后新建一个release的文件夹,并进入,执行以下命令。


cmake -G "Unix Makefiles" ..

make

sudo make install


sudo指令的作用是以管理员的身份执行操作,因为安装的过程中,会把头文件和库文件默认放入/usr/local/includ、/usr/local/lib这两个路径下。这两个属于系统底层路径,操作是需要超级管理员权限的。至此,OpenCV就安装成功了,接下来,就是在Xcode中对OpenCV进行配置了。


配置Xcode

当时我第一次在Mac下面配置OpenCV开发环境时,前面都挺顺利的,就是在配置Xcode中发现问题了。不过,后来总结问题出现的原因,还是对OpenCV使用不熟练。以前在Eclipse环境中配置过XenAPI的C语言开发环境,当时就需要指定Xen的头文件位置和库文件位置。现在,在Xcode中,我想应该也是需要指定的。一开始,头文件没有指定,只要一导入OpenCV的头文件,代码就报错,更别提编译能否通过了。后来,捣鼓了半天,导入头文件没有报错了,但是编译不成功,说我使用的OpenCV对象不存在。出现这种问题,如果对象名没写错的话,在编译的时候没有找到库文件。顺着这个思路,终于把OpenCV开发环境搞定了。


打开Xcode,选择新建一个项目

mac os 安装包安装opencv_OpenCV

选择命令行(Command Line Tool)项目,点下一步

mac os 安装包安装opencv_mac os 安装包安装opencv_02

给项目起个名字,就叫做TestOpenCV吧,语言类型选择C++,点击下一步

mac os 安装包安装opencv_xcode_03

选择一个该项目存放的路径,然后点击创建,这个项目就创建出来了。

mac os 安装包安装opencv_opencv_04

右键点击项目,选择New Group,命名为lib。

mac os 安装包安装opencv_开发环境_05

右键点击刚才新建的lib组,选择Add Files to “TestOpenCV”。

mac os 安装包安装opencv_mac os 安装包安装opencv_06

点击后,弹出一个文件选择对话框。

mac os 安装包安装opencv_OpenCV_07

接着,按下shift+command+G,并且在弹出的窗口中输入要跳转到的路径,点击GO按钮。

mac os 安装包安装opencv_opencv_08

此时,文件选择对话框里面的内容已经重定向到/usr/local/lib下了。选择当前目录下所有dylib后缀名的文件,点击Add按钮,进行添加。到此,已经将动态库和项目做好关联了。

mac os 安装包安装opencv_OpenCV_09

接下在设置项目的查找路径,也就是头文件和库文件的路径。

切换到Build Settings选项卡,如图下图1标记。如果已经在Build Settings选项卡上,忽略此操作。

将可设置项从Basic切换到All,如下图2标记。如果已经在All选项卡上,忽略此操作。

找到Search Paths设置组,如图3标记。

展开Hander Search Paths项,如图4标记。将/usr/local/include、/usr/local/include/opencv这两个路径分别添加到Debug、Release。

添加完Hander Search Paths后,类似的,将/usr/local/lib这个路径分别添加到Library Search Paths的Debug和Release中。如图5标记。

都添加完成后,别忘记将Always Search User Paths改为Yes,如图6标记。


mac os 安装包安装opencv_mac os 安装包安装opencv_10

在设置Debug或Release路径的时候,只需要将鼠标移到Debug或Release对应的行上面,就会出现一个加号样子的图标。

mac os 安装包安装opencv_opencv_11

点击加号图标,就会出现如下项。此项后面的内容是可以编辑的,默认刚添加完是该项后的内容是文本编辑状态。按一下ESC键,使此处退出文本编辑状态,然后再双击此项后面的值,即弹出一个值设置对话框。

mac os 安装包安装opencv_OpenCV_12

在对话框中点击加号即可添加的路径。

mac os 安装包安装opencv_mac os 安装包安装opencv_13


到此,相应的环境变量配置已经完成了,接下来用一段代码测试一下。点击main.cpp文件,将下面代码粘贴到代码编辑器中,然后运行。如果运行成功了,即表示OpenCV开发环境已经搭建成功了。


//
//  main.cpp
//  TestOpenCV
//
//  Created by HuangYiwei on 14-2-9.
//  Copyright (c) 2014年 HuangYiwei. All rights reserved.
//

#include <iostream>
#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv/cvaux.hpp>
#include <fstream>
using namespace std;

#define BYTE unsigned char

int main(int argc, const char * argv[])
{
    // insert code here...
#if 1
    //get the image from the directed path
    IplImage* img = cvLoadImage("/Users/huangyiwei/Desktop/屏幕快照 2014-02-09 9.14.49.png", 1);
    //NSLog(img);
    //create a window to display the image
    cvNamedWindow("picture", 1);
    //show the image in the window
    cvShowImage("picture", img);
    //wait for the user to hit a key
    cvWaitKey(0);
    //delete the image and window
    cvReleaseImage(&img);
    cvDestroyWindow("picture");
#endif
    //return
    return 0;
}



cvLoadImage(“/Users/huangyiwei/Desktop/屏幕快照 2014-02-09 9.14.49.png", 1);

这个方法需要传入一张图片的路径,这个路径是我电脑上面文件的路径。


可能不同的系统上得配置方式有差别,我的操作系统版本是10.9.1,Xcode版本是5.0.2。