下载依赖包
-
下载包管理工具brew
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
安装时如果出现:Downloading Command Line Tools (macOS Mojave version 10.14) for Xcode Error,可能由于安装依赖时需要安装Command Line Tools。自己手动安装下:
打开Xcode,然后如下图「Xcode」-「Open Developer Tool」-「More Developer Tools」…
登陆appleID之后下自己对应版本的Command Line Tools,成功后再执行命令安装brew。 -
通过brew安装cmake
brew install cmake
-
通过brew安装opencv
brew install opencv
Xcode配置opencv
- 打开Xcode - [Create a new Xcode project] - [macOS] - [Command Line Tool] - 输入项目信息创建项目。
- 点击工程 - [TARGETS] - [All] - [Build Settings] - 搜索框输入search paths - 找到search path。找到其中的[Header Search Paths]与[Library Search Paths]。
1) 在Header Search Paths后边添加:$ (PROJECT_DIR) 以及/usr/local/include两个路径
2) 在Library Search Paths后边添加:$(PROJECT_DIR)以及/usr/local/lib两个路径
如果安装的opencv比较新,/usr/local/include中出现的文件夹为opencv4/opencv2,使用时又想原来比如#include<opencv2/opencv.hpp>的方式不变,可以在Header Search Paths中再加入/usr/local/include/opencv4. - 添加动态链接库,Build Phase - [Link Binary With Libraries],点击出现的+,进行添加运行程序所使用的依赖函数。库一般在安装目录的lib下,如:/usr/local/Cellar/opencv/4.1.0_1/lib
只需要将libopencv****.dylib文件(左下角没有箭头)全部导入。 - 如果调用摄像头可能没有权限,需要添加权限:
左侧右键 - 创建property list文件文件
- 保存为 Info.plist,保存在products里
用Xcode打开添加如下描述:
点选products中的文件,右键,选择在finder中打开:
把刚才创建好的Info.plist拷贝到这个文件夹中就ok了。
-
Xcode中opencv 配置完成。可以执行代码测试。
#include <opencv2/opencv.hpp> #include <iostream> using namespace cv; using namespace std; String fileName = "/usr/local/Cellar/opencv/4.1.0_1/share/opencv4/haarcascades/haarcascade_frontalface_alt.xml"; CascadeClassifier face_classifier; int main(int argc, char** argv) { if(!face_classifier.load(fileName)) { printf("could not load face feature data...\n"); return -1; } Mat src = imread("D:/vcprojects/images/test.png"); if (src.empty()) { printf("could not load image...\n"); return -1; } imshow("input image", src); Mat gray; cvtColor(src, gray, COLOR_BGR2GRAY); equalizeHist(gray, gray); vector<Rect> faces; face_classifier.detectMultiScale(gray, faces, 1.2, 3, 0, Size(24, 24)); for (size_t t = 0; t < faces.size(); t++) { rectangle(src, faces[static_cast<int>(t)], Scalar(0, 0, 255), 2, 8, 0); } imshow("detect faces", src); waitKey(0); return 0; }