Zejun Lin's Blog

异国漂泊,野蛮生长

0%

Mac上opencv的安装和Xcode c++的配置

以下主要介绍在Mac OSX上用cmake编译opencv和如何在Xcode上用C++使用opencv

当然,这已经有较多博客记录,但由于年代原因这些博客残缺不全,或这或那的问题,导致花费了我几乎快一天的时间在配置环境

所以,以下除了主要内容,仍记录下我遇到的一些坑以及原因和解决方法


1. 安装homebrew

homebrew之于Mac正如apt之于Linux,都是一个安装包集成工具,方便我们直接用命令安装软件

安装方法

  • 直接到homebrew官网复制以下命令到终端运行
    /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

使用方法

基本命令为
brew install + 软件名
比如
brew install opencv

2. 安装CMake

CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。他能够输出各种各样的makefile或者project文件,方便我们之后用make安装opencv。CMake类似UNIX下的automake。

安装方法

直接用homebrew安装

brew install cmake

3. openCV

下载openCV

方式一

直接用homebrew下载,以opencv3为例,命令为
brew install opencv3

方式二

到opencv官网下载源码

安装openCV

  • 在terminal里cd到你下载的opencv的地址
    • homebrew下载的其路径一般在/usr/local/Cellar
  • 新建文件夹,并cd进去
    • mkdir release
    • cd release
  • cmake
    cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=$HOME ..
  • make
    make
  • install
    sudo make install
  • 问题一:为什么要加CMAKE_INSTALL_PREFIX且指定为用户目录?
    • 这个问题困扰了我许久,因为根据以往的经验,我是直接就cmake的了,但是之后的make install一直遇到权限不够的问题,即便我在install加了sudo,后来想想install执行的应该是cmake的代码,在99%下面提示错误如下:
    • file cannot create directory: /usr/local/share/OpenCV. Maybe need administrative privileges.
    • 将cmake的安装目录改成home的话就都可以了
    • 可恨的是一开始我没注意到这行错误,继续进行xcode的部分一直不成功,所以以为是xcode配置的问题而没想到是opencv安装不成功,因为大部分dylibopencv文件是已经创建成功的了。这是浪费了大部分时间的原因
  • 问题二:为什么要sudo安装?
    因为安装openCV时候要搞到系统文件夹,所以要权限

看到安装完就已经快成功了

Xcode的配置

1.首先当然是创建一个command line的c++ project

2.添加lib文件

  • 右键工程,选择Add file
    image_1ca5q65ad19591vbm183di7vgtk9.png-114.9kB
  • 在文件选择对话框输入”/“,或者按command+shift+g,在弹出的路径框中输入~/lib,就是浏览到你的home目录下,因为你把opencv安装在这了,把里面的全部dylibopecv文件都加进去(其实添加opencv_core,opencv_highgui, opencv_imgproc, opencv_ml四个大概就足够了)
    • Screen Shot 2018-04-03 at 9.15.11 PM.png-21.3kB
    • image_1ca5q7vlbbmi1fg5lrl1hkc1tl413.png-79kB
  • 嫌乱就新建一个group,把这些文件拖进去
    image_1ca5q8oo1lp21p2t1r2r1tiq1vgv1g.png-52kB

3.添加lib和header搜索路径

  • 单击项目工程文件,在Build Setting那里搜索search,找到Header Search Path和Library Search Path
  • 双击Header Search Path,新增~/include和~/include/opencv两条
  • 双击Library Search Path,添加/usr/local/lib和~/lib两条

    111.jpg-229.5kB

代码样例

好了,最后的最后,来一波代码测试下吧

下面是一个打开图片的代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/opencv.hpp>
using namespace cv;
int main()
{
//修改图片路径即可
Mat img = imread("/Users/crysple/Desktop/M1.png", CV_LOAD_IMAGE_UNCHANGED);

if(img.empty())
{
fprintf(stderr, "failed to load input image\n");
return -1;
}

imshow("Display Image", img);
waitKey(0);

return 1;
}