5

在 Mac 中配置OpenCV

 2 years ago
source link: https://changkun.de/blog/posts/install-opencv-on-mac/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

在 Mac 中配置OpenCV

Published at:

2013-08-26

  |  

Reading: 1754 words ~4min

  |  

PV/UV: 13/12

笔者初次配置Mac下的OpenCV过程中花了很多精力,出现了很多状况,这些状况在互联网上根本不存在统一说法甚至没有,关于Mac下的OpenCV的各类文献都年代久远且OpenCV更新换代较快导致它们都严重过期。本文则希望能够帮助初次配置OpenCV for Mac少走弯路。

本文平台:Macbook Air 2013 OS X 10.8.4, OpenCV 4.6.1

本文时间:2013-08-26

方法已经过期, 可供观赏, 请不要模仿

第一步:安装Xcode及关键组件

OpenCV在Mackintosh中的配置不同与windows,需要自行在Mac下编译OpenCV。首先我们要保证完整的安装好Xcode。之所以是要求完整,是因为在App Store中下载的Xcode很多组建并未安装成功,在菜单栏中:Xcode-Preferences-Downloads-Components,安装Command Line Tools,安装完成这个后我们才能在接下来的步骤(CMake阶段)顺利进行。

1.png2.png

第二步:安装、配置Homebrew和cmake

经常使用Ubuntu的同志们都知道sudo apt-get install命令,Mac下知名的有Homebrew(http://brew.sh/)、Macport。Homebrew使用的是ruby比macport更为优越,因此我们安装Homebrew,打开Mac下的终端,输入:

ruby -e "$(curl -fsSL https://raw.github.com/mxcl/homebrew/go)"

3.png

安装完成后,继续输入:

brew selfupdate
brew install cmake

第三步:编译与安装OpenCV

由于brew中的OpenCV做过调整,无法直接使用brew install opencv直接安装opencv,因此安装完cmake后,在官网(http://opencv.org/)上下载适用于Mac平台的源。管网上的下载对于新手来说或许具有迷惑性,有一个OpenCV for linux/Mac,还有一个 OpenCV for iOS(这个适用于在iOS平台上的开发),我们是Mackintosh自然选择前者。

4.png

解压完成后会看到上图所展示的文件夹,在终端中使用cd和ls两命令配合进入该文件夹中,例如:我的opencv位于如图位置:

5.png

在终端中,进入该目录下:(注意:由于我已经编译完成过,所以多了一个build文件夹)

6.png

这时通过cmake来编译opencv:

mkdir build
cd build
cmake -G "Unix Makefiles" ..
make
sudo make install

这时,来到目录:/usr/local/lib和/usr/local/include检查是否已经成功安装opencv的lib文件和头文件。

7.png

这时我们可以看到,/usr/local/lib路径下已经包含了很多opencv的dylib文件,/usr/local/include中包含了opencv和opencv2两个文件夹。说明我们已经成功安装好opencv。

第四步:在Xcode中配置opencv

方法一(不推荐):

8.png

如果lib文件链接正确,我们会在xcode的左侧看到一个lib的文件夹。使用opencv需要配置头文件路径和lib文件:

配置lib:

9.png

然后下下面的界面下按下键盘上的“/”键来手动输入路径:

10.png11.png

很自然的我们要输入的路径为:/usr/local/lib

配置头文件路径: 如图所示,在Header Search Path中输入:/usr/local/include /usr/local/include/opencv /usr/local/include/opencv2

12.png

至此,opencv的配置已经完毕。

下面我们来用代码测试是否成功:

//
//  test.cpp
//
//  Created by 欧 长坤 on 13-8-16
//  Copyright (c) 2013年 欧 长坤. All rights reserved.

#include <opencv2/opencv.hpp>
#include <iostream>
using namespace std;
using namespace cv;

int main ()
{
    const char* imagepath = "/Users/ouchangkun/Documents/OpenCV/OpenCV项目/test_opencv/test_opencv/building.jpg";
    IplImage* img = cvLoadImage(imagepath);
    cvShowImage("hehe", img);
    cvWaitKey();

    return 0;
}

13.png

方法二(推荐,方法二配置的时候笔者已经升级到Xcode5):

在Build Settings中,

Search Paths:
Header Search Paths: /usr/local/include
Library Search Paths: /usr/local/lib
User Header Search Path: /usr/local/include /usr/local/include/opencv /usr/local/include/opencv2
Linking:
Other Linker Flags: -lopencv_core -lopencv_highgui -lopencv_imgproc

根据需求可添加:

-lopencv_core -lopencv_highgui -lopencv_imgproc -lopencv_legacy -lopencv_contrib -lopencv_calib3d -lopencv_features2d -lopencv_flann -lopencv_ml -lopencv_objdetect -lopencv_video

进一步,使用OpenCV2的各类函数时,C++库和opencv库编译不一致,需要将 (http://stackoverflow.com/questions/13461400/opencv-unresolved-symbols-name-mangling-mismatch-xcode)

C++ standard library: libc++(C++ Standard Library)改为libstdc++(GNU C++ standard library)即可正常编译显示图片。 (libc++是一个苹果新写的c++标准库,用来支持最新的c++11标准,而OpenCV则不支持该库)。

丧心病狂各种配置恶心资料:


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK