入门教程之Mac上使用CLion搭建OpenCV开发环境

  • Post author:
  • Post category:其他


写在前面:

前一段时间心血来潮想搞一搞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之后再次编译,编译通过,运行成功:

至此,这篇基础教程在这么多文字的描述下算是完成了。

希望可以帮到你。



版权声明:本文为ak46287972原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。