mac中Xcode配置opencv

下载依赖包

  1. 下载包管理工具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。

  2. 通过brew安装cmake

    brew install cmake
    
  3. 通过brew安装opencv

    brew install opencv
    

Xcode配置opencv

  1. 打开Xcode - [Create a new Xcode project] - [macOS] - [Command Line Tool] - 输入项目信息创建项目。
    mac中Xcode配置opencv
    mac中Xcode配置opencv
  2. 点击工程 - [TARGETS] - [All] - [Build Settings] - 搜索框输入search paths - 找到search path。找到其中的[Header Search Paths]与[Library Search Paths]。
    mac中Xcode配置opencv
    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.
  3. 添加动态链接库,Build Phase - [Link Binary With Libraries],点击出现的+,进行添加运行程序所使用的依赖函数。库一般在安装目录的lib下,如:/usr/local/Cellar/opencv/4.1.0_1/lib
    只需要将libopencv****.dylib文件(左下角没有箭头)全部导入。mac中Xcode配置opencv
  4. 如果调用摄像头可能没有权限,需要添加权限:
    左侧右键 - 创建property list文件文件mac中Xcode配置opencv
  • 保存为 Info.plist,保存在products里 mac中Xcode配置opencv
    用Xcode打开添加如下描述:mac中Xcode配置opencv
    点选products中的文件,右键,选择在finder中打开:
    mac中Xcode配置opencv
    把刚才创建好的Info.plist拷贝到这个文件夹中就ok了。
    mac中Xcode配置opencv
  1. 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;
    }