写在前面:
前一段时间心血来潮想搞一搞OpenCV。因为是为了安卓而进行学习,因此C/C++语法以及工具上并不熟悉,
查找了很多的教程以及帖子:
部分人使用的是
windows系统Visual Studio
工具进行开发;
部分人使用的是
Mac上的XCode
进行开发;
当然也有使用
windows系统的CLion
进行开发等等,
但是总感觉是隔靴搔痒似的抓不到重点。因此我决定也写一篇类似的环境搭建文章,算是给众多的选择中多开辟出来一个新的途径吧。
适用群体:
1、如果你用的是windows系统,那你可以忽略本篇文章,工具选择上来说你可以使用Visual Studio ,当然你也可以选择CLion,但是网上关于这种情况的帖子很多,有些是配置了环境变量,另外OpenCV在封装库的时候对windows就很友好。
2、如果你用的是Mac系统,同时你又是XCode的坚定支持者,那你也可以跳过本篇文章,我本人也不会使用XCode(毕竟是开发安卓过来试水的半吊子),因此无法给出指导意见。
3、
最终剩下的的就是使用Mac系统,同时不会使用XCode,而是用CLion,也许我这篇文章能够略微(毕竟我也是小白)帮到你。
以下就是环境搭建的详细步骤:
(ps:最基本的开发工具CLion怎么安装我这里就不多做赘述了。)
第一步:brew安装 (如果已经安装,请看下一步)
进入brew官网(
https://brew.sh/
) 然后 复制安装代码 粘贴到终端窗口里 就可以傻瓜式安装了。
第二步:使用brew下载OpenCV
在OpenCV官网中,默认给出了windows、iOS、Android版本库的下载,单单没有给mac库的下载链接,不得不说干的漂亮,好一个劝退小技巧。
因此只能另行想办法 使用brew进行下载:
命令:
brew install opencv
待下载完成后会给出成功提示并告知下载到的目录位置。
注意:如果默认选择opencv 这里会从服务器下载最新版本的库,此处为4.5.1,如果想换别的版本例如opencv 3的版本
可以使用命令 :
brew install opencv@3
第三步,OpenCV目录结构
根据上面提供的下载完成的目录
/usr/local/Cellar/opencv(@3)
可以先看一下OpenCV的结构
bin目录 包含OpenCV的可执行文件 如果下载好之后 可以在终端直接运行里面的文件,例如:opencv_version 命令可以查看下载的OpenCV的版本号
include目录 包含开发OpenCV的各种头文件 ,只要定位到include就好,不需要定位到下级目录
lib目录,包含是OpenCV 的库 (此处就是windows和mac的不同,具体差异,后面会讲)
share目录,包含一部分第三方的库,OpenCV的协议许可文件,还有经过训练的库。
第四步:创建CLion工程,并且引入OpenCV库
CLion默认是通过CMake进行库依赖管理的,因此只要创建好工程之后,编辑好CMake文件就可以。
贴代码:
cmake_minimum_required(VERSION 3.17)
project(FaceTracking1)
set(CMAKE_CXX_STANDARD 11)
include_directories("/usr/local/Cellar/opencv@3/3.4.13_2/include")
link_directories("/usr/local/Cellar/opencv@3/3.4.13_2/lib")
add_executable(FaceTracking1 FaceTracking.cpp)
set(OpenCV_LIBS
opencv_core
opencv_highgui
opencv_imgproc
opencv_imgcodecs)
target_link_libraries(FaceTracking1 ${OpenCV_LIBS})
重点在
include_directories 、 link_directories 、target_link_libraries
这里
include_directories
指定了引入头文件的目录位置
link_directories
指定了库文件的目录位置
target_link_libraries
指定要在那个工程下面(此处为FaceTracking1)引入哪些库
在代码中引入opencv的库尝试写一个最简单的hello word:
#include <opencv2/opencv.hpp>
using namespace cv;
int main() {
//引入本地文件,交给对象"img"
Mat img = imread("/Users/test/Desktop/test.jpeg");
//显示图片文件,窗口名称为img
imshow("img" , img);
//变色处理,将彩色变为灰度图像 源文件为img ,变色后保存到img里面
cvtColor(img , img , COLOR_BGR2GRAY);
//显示变色后的图片,窗口名称为img2
imshow("img2",img);
waitKey();
return 0;
}
效果:
至此一个最简单的OpenCV项目算是完成了。
———————————————————————————-此处有分割线———————————————————————————-
对于初学者来说,还是有些坑。
此处就要提windows版本的开发库。
windows版本的目录结构
所有的库都打包成了一个库文件
“
opencv_world343d
”
但是mac版本的库是独立的,这就是windows版本和mac版本的差异之处。
如果我代码中想要引入摄像头,直接撸码:
#include <opencv2/opencv.hpp>
using namespace cv;
int main() {
VideoCapture capture(0);
while (1){
Mat p ;
capture >> p ;
cvtColor(p , p , COLOR_BGR2GRAY);
imshow("capture" , p);
waitKey(30);
}
}
在windows系统是可以成功的。
但是在mac上会因缺少库文件而报编译失败。
此处有个方法,就是查看引入的对象所在的头文件名称
例如VideoCapture 是在 videoio里面定义的,因此,只要引入videoio库就可以了。
set(OpenCV_LIBS
opencv_core
opencv_imgproc
opencv_highgui
opencv_imgcodecs
opencv_videoio
)
relode之后再次编译,编译通过,运行成功:
至此,这篇基础教程在这么多文字的描述下算是完成了。
希望可以帮到你。