您的位置:首页 > 运维架构

Xcode下搭建OpenCV 3.1

2016-02-05 13:01 627 查看
1、序言

OS下的Xcode相比Win下的VS感觉要完善很多,运行速度更快不说,还更容易配置工程项目,可能是个人习惯问题,下面就来讲一下在Xcode下OpenCV的搭建。

2、配置环境

2.1、基础配置

操作系统:OS X Yosemite

编译环境:Xcode Version 7.2 (7C68)

2.2、前期准备

先去官网上下载OpenCV,附上链接地址http://opencv.org/downloads.html(国内可能略卡,打不开的请自行墙)

秉着旧的不去新的不来的原则,我下载了最新版本,后面证实也能用,只是遇到国外一些很早的程序就会出错,某些被淘汰的函数无法识别。

打开网页后就去下载VERSION3.1吧,能用的,选择“OpenCV for Linux/Mac”进行下载,这里我就不贴图啦。

2.3、OpenCV安装准备

Homebrew类似Ubuntu的apt-get,Fedora的yum,简单来说就是为了方便安装软件而生的。打开Homebrew官方网站http://brew.sh/index_zh-cn.html,找到安装homebrew的ruby命令:

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)”
接下来就利用Homebrew来安装cmake。输入brew update,然后输入brew upgrade。之后输入brew install cmake 这样等待一会cmake就安装好了。

2.4、OpenCV的安装

打开下载目录,双击解压opencv-3.1.0,到该路径下,然后新建一个release文件夹,再进到release文件夹下。

cmake -D CMAKE_BUILD_TYPE=RELEASE -D

CMAKE_INSTALL_PREFIX=/usr/local ..

然后输入make就开始编译了,在OS上编译速度就是比Win上快。大概十分钟编译完毕,最后输入sudo make install进行安装,安装花的时间也挺久的,要十来分钟。

至此OpenCV就算安装完毕了。

在路径/usr/local/include下会生成opencv与opencv2子文件夹,里面包含了许多opencv的头文件。

在路径/usr/local/lib下也会生成opencv的相关的库。

关于如何查找这个“/usr/local”,打开Finder,按住Command+Shift+G,然后输入/usr/local回车就进去啦,OS下很多文件是隐藏的,通过这种方法就能进去,其它方法百度上很多,就不一一列举了。

3、OpenCV在Xcode上的编译

打开Xcode,新建一个Command Line Tool



之后是惯例,随便输就好啦



新建好工程后需要添加库,为了方便,我就把所有的库全部添加进去啦,在工程下新建个文件夹openCV_Frameworks,右键选择Add
Files to.. 



之后就像我在序言里说的那样,Xcode的工程更容易配置,单击工程,然后添加“Path”



4、OpenCV的运行

//

//  main.cpp

//  cvtest

//

//  Created by Sean on 16/1/19.

//  Copyright © 2016年 Sean. All rights reserved.

//

#include <iostream>

#include <opencv2/core/core.hpp>

#include <opencv2/highgui/high
4000
gui.hpp>

#include <opencv2/opencv.hpp>

using namespace std;

using namespace cv;

IplImage* doCanny(IplImage* image_input,

                  double lowThresh,

                  double highThresh,

                  double aperture)

{

    if(image_input->nChannels != 1)

        return (0);

    

    IplImage* image_output = cvCreateImage(cvGetSize(image_input),

                                           image_input->depth,

                                           image_input->nChannels);

    

    cvCanny(image_input,image_output,lowThresh,highThresh,aperture);

    

    return(image_output);

}

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

{

    cvNamedWindow("Camera" , CV_WINDOW_AUTOSIZE );

    

    CvCapture* capture = cvCreateCameraCapture(CV_CAP_ANY);

    

    assert(capture != NULL);

    

    IplImage *frame = 0;

    frame = cvQueryFrame(capture);

    

    IplImage *frame_edge = cvCreateImage(cvGetSize(frame),

                                         IPL_DEPTH_8U,

                                         1);

    while(1)

    {

        frame = cvQueryFrame(capture);

        if(!frame) break;

        

        cvConvertImage(frame,frame_edge,0);

        frame = cvCloneImage(frame_edge);

        

        frame_edge = doCanny(frame_edge,70,90,3);

        

        cvShowImage("Camera",frame_edge);

        char c = cvWaitKey(15);

        if(c == 27)  break;

    }

    

    cvReleaseCapture(&capture);

    cvReleaseImage( &frame_edge );

    cvReleaseImage( &frame);

    

    

    return (int)0;

}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: