XCode集成OpenCV4.8遇到的问题以及踩坑

570 阅读2分钟

XCode集成OpenCV遇到的问题以及踩坑

  1. 下载opencv

    brew install opencv
    

    下载完成的目录在 : /usr/local/Cellar/opencv

    这里下载有可能会很慢, 多尝试几次, 或者可以尝试换一个下载源:

    cd "$(brew --repo)"  
    git remote set-url origin https://mirrors.aliyun.com/homebrew/brew.git
    cd "$(brew --repo)/Library/Taps/homebrew/homebrew-core"
    git remote set-url origin https://mirrors.aliyun.com/homebrew/homebrew-core.git
    echo 'export HOMEBREW_BOTTLE_DOMAIN=https://mirrors.aliyun.com/homebrew/homebrew-bottles' >> ~/.bash_profile
    source ~/.bash_profile
    

    下载完成后, 目录结构是这样的:

    image-20230805100002113

    参考链接

  2. 打开XCode新建项目

    image-20230805095559164

  3. 选择CPP

image-20230805095644280

  1. 选择一个位置就OK了
  2. 新建完成之后,点击运行,出现打印结果就表示OK了

image-20230805095745248

  1. 配置 Header Search Paths

image-20230805100302576

这里注意版本,我opencv是4.8.1,请填写自己的版本

  1. 配置 Library Search Paths

image-20230805100536878

  1. 新建组,将opencv的引用导入进来

image-20230805100828091

  1. 添加opencv的引用

image-20230805100933253

  1. 使用快捷键,找到opencv lib目录

image-20230805101815332

  1. command + A全部选中,导入引用

    image-20230805102740513

如果libopencv下有了这些文件,说明导入成果

image-20230805102845963

注意: 这里导入的是引用, 实际上在`libopencv文件夹`中并没有任何东西

image-20230805102947772

这个文件夹也不能删除, 一旦删除,就会删除 将 /usr/local/Cellar/opencv/4.8.0_1/lib删除,这里是一个大坑!!!

至此,opev就集成进来了!

但是当运行的时候会报错: 说什么没有签名之类的

'/usr/local/lib/libopencv_ml.4.8.0.dylib' (code signature in <7695E2FD-2610-3BB5-930E-DD0D80A878BF> '/usr/local/Cellar/opencv/4.8.0_1/lib/libopencv_ml.4.8.0.dylib' not valid for use in process: mapped file has no cdhash, completely unsigned? Code has to be at least ad-hoc signed.), '/usr/lib/libopencv_ml.4.8.0.dylib' (no such file, not in dyld cache)

运行报错:

image-20230805103419501

此时打开你的钥匙串:

image-20230805103550611

先找到一个有效的证书:

image-20230805103715541

如果钥匙串里面没东西,自行百度弄一个

然后给需要签名的dylib文件,通过你的证书签名

codesign -f -s "你的证书" /usr/local/lib/*.dylib

image-20230805103954224

最后写一段代码再次运行:


#include <iostream>

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>

using namespace std;
using namespace cv;
int main(int argc, const char * argv[]) {
    // insert code here...
    cout << "Hello, World!\n";
//    // insert code here...
    Mat  image;
    image = imread("/Users/shizhenjiang/Desktop/emoji_2.png");
    namedWindow("Image", WINDOW_AUTOSIZE);
    imshow("Image", image);
    cout << "完成了!"<< endl;;
    waitKey(0);
    return 0;
}

image-20230805104438713

终于可以开开心心的学习opencv了!!

参考链接:

XCode 动态库未签名问题的解决

[Xcode](配置opencv(Mac环境下c++)(简单详细)