mac Xcode 配置 opencv
由于项目需要,想要试用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)。
Xcode 默认推荐使用 swift,虽然我们可以用 swift 再去调用 C++,这里就简单一点,直接勾选 C++ 语言。
点击项目,选择 Build Settings 选项卡,使用搜索框搜索 search,修改 Header Search Paths 和 Library Search Path。这样,Xcode 在编译 C++ 文件时,如果找不到头文件或者库文件就会去我们设置的目录下索引。
强调一下,这里的 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 选项卡,添加库文件。
我们可以使用 Finder 找到 OpenCV 的二进制库文件。首先打开 Finder,按下 Shift + command + G,输入路径 /usr/local/Cellar/opencv/4.0.1/lib(这是 brew 安装 OpenCV 的默认地址,如果版本不一样可以找一下)并跳转(因为默认这些目录是不显示的,只能用这种方法啦)。最后,搜索文件夹下的所有 .dylib 文件,拖入 xcode 的二进制库选项卡~
6.配置摄像头权限
如果要运行需要摄像头的程序
还要配置一下,否则会报错
在项目下新建一个文件 Info.plist
里面填入以下内容:
<?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;
}
上一篇: Sniffer攻击以及工作原理详解
下一篇: 优秀网站设计都有这些特质你的网站具备吗?