欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

mac Xcode 配置 opencv

程序员文章站 2022-03-19 11:35:45
...

由于项目需要,想要试用C++的opencv,而不是python的,于是便想在xcode上配置opencv,查找了一番资料,找了几篇靠谱的进行了整理。

 

1.安装Homebrew

这个我电脑本来就

如果没有,网上给了下载方法:

ruby -e “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)”

2.安装wget

brew install wget

homebrew速度太慢 

这里提供了很好的解决方法:https://www.cnblogs.com/trotl/p/11862796.html

3.安装cmake

brew install cmake

4.安装opencv

现在都会自动安装opencv4,不想安装4的话需要指定一下版本

brew install opencv

5.配置xcode 

这位老哥写得很好(除了配置摄像头权限),就直接复制了:https://zhuanlan.zhihu.com/p/54845295

C++ 是一门比较麻烦的语言,#include 进来的东西,编译链接的时候要自己配置好路径。当前文件夹下自己写的东西、系统的基础库还好说(因为已经默认了),像 OpenCV 这种下载的就得自己配置了。所以单独出一个部分讲解一下 Xcode 如何配置环境。

首先,新建一个命令行应用(废话 233)。

mac Xcode 配置 opencv

Xcode 默认推荐使用 swift,虽然我们可以用 swift 再去调用 C++,这里就简单一点,直接勾选 C++ 语言。

mac Xcode 配置 opencv

点击项目,选择 Build Settings 选项卡,使用搜索框搜索 search,修改 Header Search Paths 和 Library Search Path。这样,Xcode 在编译 C++ 文件时,如果找不到头文件或者库文件就会去我们设置的目录下索引。

mac Xcode 配置 opencv

强调一下,这里的 Header Search Path 和 OpenCV3 是不同的,OpenCV3 默认的头文件文件夹是 opencv,而 OpenCV4 的是 opencv4。

Header Search Path:
/usr/local/include
/usr/local/include/opencv4

Library Search Path:
/usr/local/lib

点击项目,选择 Build Phases 选项卡,添加库文件。

mac Xcode 配置 opencv

我们可以使用 Finder 找到 OpenCV 的二进制库文件。首先打开 Finder,按下 Shift + command + G,输入路径 /usr/local/Cellar/opencv/4.0.1/lib(这是 brew 安装 OpenCV 的默认地址,如果版本不一样可以找一下)并跳转(因为默认这些目录是不显示的,只能用这种方法啦)。最后,搜索文件夹下的所有 .dylib 文件,拖入 xcode 的二进制库选项卡~

mac Xcode 配置 opencv

 

6.配置摄像头权限

如果要运行需要摄像头的程序

还要配置一下,否则会报错

在项目下新建一个文件 Info.plistmac Xcode 配置 opencv

里面填入以下内容:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>NSCameraUsageDescription</key>
    <string>NSCameraUsageDescription</string>
</dict>
</plist>

把该文件同执行文件放在一起(放不放其实我也记不清了,反正需要plist这么一个玩意)

弄好之后,就可以运行代码测试效果了

#include<opencv2/opencv.hpp>
#include<opencv2/core/core.hpp>
#include<opencv2/highgui/highgui.hpp>
#include<opencv2/imgproc/imgproc.hpp>
using namespace cv;
using namespace std;

// 视频来源于摄像头
VideoCapture capture(0);
Mat edges;

int main(int argc, const char * argv[]) {
    while (true) {
        Mat frame;
        // 每一帧
        capture >> frame;
        // 转为灰度图
        cvtColor(frame, edges, COLOR_BGR2GRAY);
        blur(edges, edges, Size(7, 7));
        Canny(edges, edges, 0, 30, 3);
        // 边缘检测并显示边缘
        imshow("Read Video", edges);
        // 等待用户输入
        if(waitKey(30) >= 0) break;
    }
    return 0;
}

 

相关标签: 计算机视觉