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/highgui.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;
}