手把手教学:MacOS系统下Xcode配置使用OpenCV方法

从windows换成MacOS系统,需要重新配置openCV用一用,顿时想起被Visual Studio和各种环境Path支配的恐惧……所幸,OS系统配置opencv算是十分方便了,但首先,您要先有Xcode(快先到APP store搜索下载吧,5GB+,要下比较久的)。正好平时做iOS开发,Xcode已经装好,此时就很庆幸了,剩下的工作,就是在终端(terminal)中敲几行命令的事儿了!

就是这玩意儿了,功能实为强大!

整个过程十分简单便捷,预计1个小时以内可以搞定,比windows友好很多。

代码都是亲测可行,我的环境是MACOS 10.13.4 + Xcode9.3 

预准备阶段:

什么都不要做!是的,不需要像windows一样先去opencv管网下载安装最新版本。因为我们后面会使用终端命令行来完成这个过程。后者的操作办法更稳妥些,可以自动适配你的操作系统/xcode等,不会出现很多莫名其妙的问题。

第一步

安装Homebrew。Homebrew是一个软件包管理器,可以安装apple没有给你预装的东西。它会将软件安装到独立目录,并将文件软连接至/usr/local。详情到这里了解一下:https://brew.sh/index_zh-cn.html

安装方法:打开终端,输入:

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

响应界面:


按回车继续,响应是:


可以看出,使用homebrew方法,可以自动适配你的xcode版本和OS操作系统版本。这也为后面的配置省了很多麻烦。

出现下面提示就是安装OK啦:


第二步

安装wget。

brew install wget

wget是一个从网络上下载文件的自由工具,可以在用户退出系统之后继续在后台执行,直到下载任务完成。详见:https://baike.baidu.com/item/wget/9925250?fr=aladdin,但是为什么要装也不知道了,有些大牛的教程里推荐安装,似乎不装也没关系?

第三步

安装cmake。

 brew install cmake

这个是必须安装的了。它是个跨平台的安装工具,具体的参见百度百科:https://baike.baidu.com/item/cmake/7138032?fr=aladdin。再输入一次命令,可以检查一下是否安装成功了已经:


第四步

重点来了,利用brew帮忙安装opencv!

brew install opencv

这个时候,会耗费一段时间来安装opencv,界面响应如下

等安装进度条都跑完(有一大堆库要一个个来的,大概要10分钟),至此opencv安装就完成了。

在Xcode中使用OpenCV

1)打开Xcode,创建一个空的command line工程:

操作顺序如下;选择语言C++



项目名称随便写个,记得语言选择C++:


点击工程,按如下找到Header Search Paths和Library Search Paths:分别输入如下图所示的/usr.......。


创建一个new groups,用来存放opencv的头文件。

前往:/usr/local/Cellar/opencv/3.4.1_4/lib (桌面下按shift+command+g,输入,快速进入这个文件夹)。

这里3.4.1_4是homebrew自动帮忙安装的opencv的版本号。这个要根据你的brew给你装的是哪个版本的来定了。

将里面的.dylib文件拖入刚才新建的文件夹下。可以按照种类排序一下,左下角有箭头的,就是替身文件,可以不用拖进去


至此,配置工作大功告成。

下面就可以用一下canny算子代码来测试一下效果了:

#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, const 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;
}

结果图如下:(附上自己帅照??)


祝大家都能配置成功哟!

猜你喜欢

转载自blog.csdn.net/lyxleft/article/details/80168171