一、安装OpenCV

在Mac下安装OpenCV可以通过下载源码自己编译安装,也可以通过像MacPorts或Homebrew这样的软件包管理器进行安装。本篇文章使用Homebrew安装,所以确保已经安装了Homebrew。

打开Terminal,输入安装opencv的命令:

brew install opencv

提示以下错误:

Error: No available formula for opencv

Searching taps...

homebrew/science/opencv

意思就是没有适用于opencv的服务。接着它搜索扩展服务,搜到了homebrew/science/opencv。继续安装之前,需要先添加homebrew/science扩展服务,命令如下:

brew tap homebrew/science

安装结束后,输入brew install opencv继续安装opencv。

opencv支持以下编译选项:

--32-bit
	Build 32-bit only
--c++11
	Build using C++11 mode
--with-ffmpeg
	Build with ffmpeg support
--with-java
	Build with Java support
--with-openni
	Build with openni support
--with-qt
	Build the Qt4 backend to HighGUI
--with-tbb
	Enable parallel code in OpenCV using Intel TBB
--without-eigen
	Build without eigen support
--without-opencl
	Disable gpu code in OpenCV using OpenCL

如果想安装qt和tbb支持的opencv,执行以下命令:

brew install opencv --with-tbb --with-qt

安装opencv完成后,在/usr/local/lib和/usr/local/include目录中分别可以找到opencv的库文件和头文件。

二、Xcode中使用OpenCV

1. 打开Xcode,创建一个“Command Line Tool”项目,Type选择C++,如下图:

Mac10.9安装OpenCV2.4.8及在XCode5中的使用-程序旅途

2. 添加OpenCV到项目中。

2.1 创建一个Group,命名为"OpenCVLibraries"。

Mac10.9安装OpenCV2.4.8及在XCode5中的使用-程序旅途

2.2 在OpenCVLibraries上右击,选择Add Files to "HelloOpenCV"...

Mac10.9安装OpenCV2.4.8及在XCode5中的使用-程序旅途

2.3 当文件选择对话框弹出,按住"Command"+"Shift"+"G",输入/usr/local/lib,回车。

2.4 选择需要的OpenCV库文件(以libopencv_*.dylib格式命名的),或者全选,然后点击“Add”按钮。

Mac10.9安装OpenCV2.4.8及在XCode5中的使用-程序旅途

3. 选中项目文件,在xcode中间区域会出现“Build Settings”,选中“All”,显示所有的编译设置。

Mac10.9安装OpenCV2.4.8及在XCode5中的使用-程序旅途

4. 向下滚动找到“Header Search Paths”,或者直接在右上角的搜索框里输入“Header Search Paths”搜索,双击它的值,移除已经存在的条目,添加"/usr/local/include"。

Mac10.9安装OpenCV2.4.8及在XCode5中的使用-程序旅途

5. 搜索“Library Search Paths”,将原来的值替换为"/usr/local/lib"。

Mac10.9安装OpenCV2.4.8及在XCode5中的使用-程序旅途

6. 搜索“C++ Standard Library”,选择“libstdc++ (GNU C++ Standard Library)”

Mac10.9安装OpenCV2.4.8及在XCode5中的使用-程序旅途

配置完成了,下面测试一下程序吧。

7. 将基于VS2013搭建OpenCV开发环境中的程序拷贝过来,稍微修改一下图片的路径:

//
//  main.cpp
//  HelloOpenCV
//
//  Created by mingceng on 14-4-2.
//  Copyright (c) 2014年 Bob. All rights reserved.
//
#include <opencv2/highgui/highgui.hpp>
#include <iostream>

using namespace std;
using namespace cv;

int main(int argc, const char * argv[])
{

    Mat img = imread("/Users/mingceng/Pictures/girl.jpg");
    if (img.empty())
    {
        cout << "打开图像失败!" << endl;
        return -1;
    }
    namedWindow("image", CV_WINDOW_AUTOSIZE);
    imshow("image", img);
    waitKey();
    return 0;
}

按Command+B 编译,出现错误:

Undefined symbols for architecture x86_64:

  "cv::namedWindow(std::string const&, int)", referenced from:

      _main in main.o

  "cv::imread(std::string const&, int)", referenced from:

      _main in main.o

  "cv::imshow(std::string const&, cv::_InputArray const&)", referenced from:

      _main in main.o

ld: symbol(s) not found for architecture x86_64

clang: error: linker command failed with exit code 1 (use -v to see invocation)

这是由于C++库和OpenCV编译库不一致造成的,解决办法是把第6步:C++ Standard Library修改为libstdc++ (GNU C++ Standard Library)的操作撤销,即选择“libc++(LLVM C++ standard library with c++11 support)”。

再次编译,通过,按Command+R运行,送个福利,结果如下图:

Mac10.9安装OpenCV2.4.8及在XCode5中的使用-程序旅途