包教包会 | (2018最新)mac下配置opencv2.X+x
1. 背景
踩了无数坑之后,终于把opencv2.X+xcode的环境弄好了,看了很多配置的博客,都是时间比较早的,所以我写篇文章总结一下,让大家少走弯路吧。(小白一枚,有错轻拍)
2. 环境
mac系统
mac系统.png
xcode
xcode版本.png
opencv版本
opencv版本.png
3. opencv安装
3.1安装homebrew和其它
3.1.1 homebrew没有安装的朋友,先安装homebrew安装过的忽略
打开终端,输入以下命令:
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
出现install successful就表明安装成功
3.1.2 安装wget
命令:
brew install wget
我这里已经安装过了
3.1.3 继续安装cmake
命令:
brew install cmake
我这里已经安装过了
3.2 通过homebrew安装opencv2.X
重头戏来了
如果想要安装opencv3,输入命令
brew install opencv
如果想要安装opencv2,输入命令
brew install opencv@2
这里就是个小坑,因为2和3的语法变化还是蛮大的,所以在安装前一定要注意!!
默认路径为:
/usr/local/Cellar/opencv@2
到这里opencv算是安装成功了。
4.xcode配置
直接上图:
4.1
image.png4.2
image.png4.3
image.png4.4
image.png4.5
image.pngHeader Search paths:头文件路径
library search paths:opencv里lib文件位置
这里值得注意的是:
-
一定要查看自己安装的opencv的头文件目录,很多人和我的路径并不一样,其他人微博上有header search paths在
image.png/usr/local/inlucde
路径下的,所以一定要找到自己opencv和opencv2的文件夹!如果这里出错,在xcode写完代码后opencv头文件时会报错,表明opencv/opencv2 not found
这里是我的路径:
-
library search paths的路径,这里就是在opencv@2文件夹下的lib(这里按默认安装位置的话应该和我的路径一致)
image.png
4.5 在项目目录下新建group并命名(我命名为head)
image.png4.6 按command+空格输入/usr/local/Cellar进入Cellar目录然后进入opencv的lib目录下
image.pngimage.png
4.7 把所有右下角不带箭头的.dylib文件全部拖入刚刚新建的group里
如图中的这些文件,我一共有18个文件
image.png
拖好之后就是这样
image.png
4.8 然后就可以开始写代码了
image.png5. 实例代码(从Mac自带的摄像头读入图像,然后canny提取了边缘然后显示。)
从大佬那里偷来的代码,博客上都有
#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;
}
结果:
image.png
6. over
不知道有没有讲清楚,希望大家一次配置成功!如有问题请随时指教!