CV-2020-实践:01 环境的搭建 (OpenCV, OpenMP和OpenCL)
计算机视觉的C++实践与实现,基于mac的Xcode平台,安装和配置包括OpenCV、OpenMP和OpenCL。
Computers are useless. They can only give you answers. -- Pablo Picasso
1. OpenCV
- OpenCV (Open Source Computer Vision Library)是一个基于BSD许可(开源)发行的跨平台计算机视觉库,好吧,这句来自百度百科。简单来说,OpenCV提供和实现了很多图像处理和计算机视觉方面的很多通用算法(之前用python使用,现在么,是C++了,虽然安装麻烦了一些就是了,汗)。
步骤一:homebrew安装
- homebrew是Mac下的软件包管家,以及是老朋友了。
- 安装可以直接进入官网,然后在终端输入其中的安装指令,如果存在问题的话,可以百度一下,还是比较方便的。
-
当前的命令是,
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
步骤二:OpenCV安装
-
通过homebrew直接安装opencv(之前还先装CMake,去下载源代码,但真的是太慢了,汗)。
brew install opencv
-
可能需要先更新homebrew,使用
brew update
(感觉好慢,大家可以考虑替换更新源,个人使用的是阿里的)。# 替换brew.git cd "$(brew --repo)" git remote set-url origin https://mirrors.aliyun.com/homebrew/brew.git # 替换homebrew-core.git cd "$(brew --repo)/Library/Taps/homebrew/homebrew-core" git remote set-url origin https://mirrors.aliyun.com/homebrew/homebrew-core.git # 应用生效,update可能需要等一段时间 brew update # 替换homebrew-bottles: echo 'export HOMEBREW_BOTTLE_DOMAIN=https://mirrors.aliyun.com/homebrew/homebrew-bottles' >> ~/.bash_profile source ~/.bash_profile
- 如果很久(十分钟)还是没能更新成功,可以使用
brew doctor
查看是否有问题提示,有的话按照提示修复即可(我的话,还更新了系统和XCode)。另外过程中可能会出现The bottle needs the Xcode CLT to be installed.
的提示,这时可以使用xcode-select --install
进行安装。 - 如果一切都顺利的话,之后的安装大概需要一个小时多(但我用了一天,太多事了),安装完成后可以使用
brew info opencv
命令查看是否安装成功(阴影处为安装目录)。
步骤三:XCode配置与测试
- 新建一个Command Line Tool,在BuildSetting中,添加Header Search Paths和Library Search Paths,如图,
-
然后可以将
/usr/local/cellar/opencv/4.2.0_1/lib
(由个人的版本决定)中所需的*.dylib导入项目中。- 方法一:可以在Build Phase中的Link Binary With Libraries中加入;
- 方法二:也可以直接在工程中新建一个文件夹,自行复制导入。
-
编写测试代码
#include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> int main(){ using namespace cv; //读入图片 Mat image = imread("??/fobird.png"); //文件路径 //创建视图窗 namedWindow("FoBird"); //在窗口中展示图片 imshow("FoBird", image); //waitkey 5000ms waitKey(0); return 0; }
- 运行,查看结果
2. OpenMP
- OpenMP (Open Multi-Prcessing)是程序并行化的一个框架,在图像处理、使用OpenCV时常需要使用。
步骤一:安装llvm
- 为什么需要安装llvm?什么是llvm?llvm、gcc和Clang各自都是什么?这些就不赘述了(其实我也不是很清楚),待之后再细细研究吧。总之OpenMP的开发支持已经移入了www.llvm.org之中,通过brew下载了llvm就可以了。
- 下载同OpenCV一样了,终端输入
brew install llvm
,然后放置许久(真的好久),就好了,是不是很方便呢? - 将llvm加入路径,
echo 'export PATH="/usr/local/opt/llvm/bin:$PATH"' >> ~/.zshrc
(按照提示,原本为echo 'export PATH="/usr/local/opt/llvm/bin:$PATH"' >> ~/.bash_profile
)
步骤二:XCode配置
- 创建一个新的XCode项目,和上文一样;
-
进行设置(Build Setting中):
- Enable Index-While-Building Functionality设置为No;
- Enable Modules (C and Objective-C)设置为No;
- Header Search Paths加入/usr/local/Cellar/llvm/9.0.1/lib/clang/9.0.1/include;
- Library Search Paths加入/usr/local/Cellar/llvm/9.0.1/lib;
- 增加一个User-Defined变量CC,为/usr/local/bin/clang-omp(Basic, Customized, All 一栏中最末的加号);
- Apple Clang - Custom Compiler Flags 中的 Other C Flags 加入 -fopenmp;
- 导入libomp.dylib(/usr/local/Cellar/llvm/9.0.1/lib中有,也可以从其他地方加入)。
步骤三:代码测试
-
代码
#include <stdio.h> #include "stdlib.h" #include <omp.h> int main(int argc, const char * argv[]) { omp_set_num_threads(8); #pragma omp parallel printf("hello world!No.%d\n", omp_get_thread_num()); return 0; }
-
输出示例(因为并行,所以顺序可能不同)
3. OpenCL
- OpenCL (Open Computing Language),第一个面向异构系统通用目的并行编程的开放式、免费标准,也是一个统一的编程环境,便于软件开发人员为高性能计算服务器、桌面计算系统、手持设备编写高效轻便的代码。
- 与OpenMP相比,OpenCL关注的是异构系统中GPU的并行,而OpenMP则主要是基于CPU的并行。
- 与CUDA相比,两者基本思想相近,只是在Apple和AMD亲近后,NVIDIA的CUDA在MAC上就很难使用了。
步骤一:XCode导入
- 终于不用下载了,XCode中已经自带,直接在Link Binary With Libraries中加入OpenCL.framework即可,开心。
步骤二:代码测试
- 大家可以自行网上学习寻找一个代码,进行测试(由于师兄提供的测试代码内容太多,就不再复制在此了。
- 就此,3大Open (OpenCV, OpenMP 和 OpenCL) 终于安装其活了,祝愿大家也能顺利地配置呢。
参考: