Ubuntu下的完整OpenCV开发环境搭建

Ubuntu下的完整OpenCV开发环境搭建

 1. 操作系统

       强烈建议使用ubuntu16.04或ubuntu14.04,在windows下库的配置极其麻烦。目前比较主流的是ubuntu16.04,但高翔使用的是14.04,因为在他写《视觉SLAM十四讲》的时候ROS和OpenCV等重要部分对16.04缺乏支持,现在支持已经相对完善了。

       尽量不要尝鲜,尽量不要尝鲜,尽量不要尝鲜,重要的事情说三遍。什么,想用17.04?啊哈哈你确定?

       这里需要解释一下为什么不在Windows下使用Visual Studio。首先,环境变量和库的配置极其麻烦,而且每次建立新项目都要重新引用,很容易忽略重要的库而造成麻烦。别说肯定都能记得住,除非写成一个文档每次新建项目的时候照着做,否则肯定会丢东西;其次,在安装库的时候出现了g2o库死活装不上的问题,这一点让我直接放弃了Windows,转向了ubuntu。

       相比之下,ubuntu下库的配置极其简单,编译采用Cmake的形式,和VS下的习惯不太一样,但比在VS下逐条添加引用简单得多。如果配合Clion这种神一般的IDE,编程简直就是一种享受。IDE的问题接下来还会详细说明。

       总之,用Ubuntu就对了,千万不要尝试Windows。血的教训。

 

2. 关于使用虚拟机还是双系统

用双系统会遇到电脑发热风扇狂转的问题,目前尚未解决;

用虚拟机会遇到运行不流畅,点云图显示不出来,某些库安装时死机的问题。

自己权衡吧,用台式机的话建议双系统,用笔记本的话建议找个台式机。【认真脸】其实虚拟机也是可以跑一下的,只不过在安装ORB SLAM2的时候会遇到卡死的问题,如果不用ORB SLAM2就不用担心,放心大胆地用虚拟机吧。就是有点卡。

装双系统的时候会遇到引导的问题,一定要在bios里面设置ubuntu的引导为第一优先级,不然会直接进windows系统。缺点就是默认系统变成了ubuntu。至于分区那些细节的问题……

我还是说一下吧,方式就是传统的u盘装系统,给电脑硬盘分出50G左右的空间,进入安装程序中的硬盘分区环节后,这样分区:

/:存储系统文件,建议10GB ~ 15GB;

swap:交换分区,即Linux系统的虚拟内存,建议是物理内存的2倍;

/home:home目录,存放音乐、图片及下载等文件的空间,建议最后分配所有剩下的空间;

/boot:包含系统内核和系统启动所需的文件,实现双系统的关键所在,建议200M。

       文件格式,除了swap设置成“交换分区”,其他的全部设置成Ext4。

       然后安装就好。记得在bios里关闭安全启动。

 

3. 编程环境

接下来的这一部分,我的建议是,在/home/【你的用户名】/路径下,分别建立文件夹,别分太多层,不然就是给自己添麻烦,以及混淆视听。以我的系统为例,我会将OpenCV放在/home/konia/OpenCV里面。另外在/home/【你的用户名】/路径下单独建立一个文件夹来放项目,这样会给自己省很多麻烦。

(1)OpenCV

首要的库就是OpenCV了,目前最新版本是3.3.0,最新的稳定版本是3.2.0,不过要是在OpenCV的官网上直接下默认的源代码,下载下来的是3.3.0,用起来也没遇到什么麻烦。OpenCV官网http://opencv.org/,在这里可以下载源代码。在ubuntu下安装opencv使用的方式是通过终端,以cmake的方式安装。现在终端中安装依赖项:

sudoapt-get install build-essential libgtk2.0-dev libvtk5-dev libjpeg-devlibtiff4-dev libjasper-dev libopenexr-dev libtbb-dev

       顺便在这里简单讲一下Cmake编译,首先要有一个CMakeLists的txt文件,告诉编译器你需要编译哪些内容,这个“内容”在自己编写的项目中需要自行添加,而在OpenCV里面已经写好了这个文件,我们只需编译即可。

       具体的步骤是,解压OpenCV,在终端中进入解压后的文件夹,然后在终端中:

       mkdirbuild

       cdbuild

       cmake..

       make

       这样就完成了编译,但对于OpenCV来说,只有编译不够,还要安装:
       sudo make install

       这样才算安装完成。

(2)Eigens

       这是个线性代数库,在高翔github上的第三方库里可以找到。

网址:https://github.com/gaoxiang12/rgbd-slam-tutorial-gx

接下来会用到的Ceres和g2o也可以在这里找到。安装的方式和OpenCV大同小异。

(3)Ceres

       这个东西……说实话我还没用到很多,不过既然说了那就装一下吧。

依赖项:

sudoapt-get install liblapack-dev libsuitesparse-dev libcxsparse3.1.2 libgflags-devlibgoogle-glog-dev libgtest-dev

(4)g2o

图优化库,这个很重要!

依赖项:

sudoapt-get install libqt4-dev qt4-qmake libqglviewer-dev libsuitesparse-devlibcxsparse3.1.2 libcholmod-dev

如果使用的是ubuntu 16.04,那么需要注意,g2o_viewer的使用需要加一点处理步骤,以下内容引自高翔博士的博客:http://www.cnblogs.com/gaoxiang12/p/4770813.html

“g2o_viewer运行不了了,问题是error while loading shared libraries: libg2o_viewer.so: cannot open shared object file: No such file or directory, 经帮主指点,发现问题的原因是在默认情况下,编译器只会使用/lib和/usr/lib这两个目录下的库文件,通过源码包进行安装时,如果不指定--prefix会将库安装在/usr/local目录下,而又没有在文件/etc/ld.so.conf中添加 /usr/local/lib这个目录。这样虽然安装了源码包,但是使用时仍然找不到相关的.so库,就会报错。也就是说系统不知道安装了源码包。网络上的解决方法是在/etc/ld.so.conf里添加绝对路径/usr/local/lib,作为一个新手,我实在不知道怎么样添加进去,用gedit编辑之后,不能保存,用echo /usr/local/lib >> /etc/ld.so.conf没反应,于是我就采用了奇葩方法:用gedit打开/etc/ld.so.conf,然后添加/usr/local/lib ,再把这个文件保存到home,然后sudo cp -i  ld.so.conf /etc/ld.so.conf,之后,执行ldconfig(这一步是必须的,目的是利用ldconfig执行文件将 /etc/ld.so.conf的数据读入高速缓存中),再次运行g2o_viewer result_after.g2o(跑通《一起做7》,在data文件夹下生成的),成功!”

但在16.04下这还不够,我们需要最新的g2o源代码,不能使用高博士在github上提供的g2o源码,因为那是针对14.04系统的。在新的g2o中已经解决了这些问题,所以我们的没必要多费周折了。

(5)PCL

       这个是点云库,很重要。目前的版本是1.8,直接在终端写:

       sudo apt-get install libpcl-dev pcl-tools

       即可。

(6)Qt

       因为文件太大一直没下,其实应该装一个的。

       【这部分内容等我尝试装过之后补全】

(7)ORB SLAM 2

       用虚拟机装这个会遇到死机的问题。

       具体安装过程参考http://blog.csdn.net/zzlyw/article/details/54730830

 

4. IDE的安装与使用

       说白了这是个ubuntu下运行的VS,我使用的是Clion,安装时输入个激活码就可以激活了,很容易。

       这货是ubuntu下得到编程神器,用过一次就爱上它了,自动在项目里生成CMakeLists文件,只需自行往里面添加编译项就可以了。以OpenCV为例:

 

       find_package( OpenCV REQUIRED ),寻找OpenCV库

       include_directories(${OpenCV_INCLUDE_DIRS} )

target_link_libraries(项目名称 ${OpenCV_LIBS} ),链接OpenCV库

 

其他的库与OpenCV类似。比较特别的是g2o,接下来的一段引用自高翔的博客:http://www.cnblogs.com/gaoxiang12/p/5304272.html

 

把g2o引入自己的cmake工程:

 

# 添加g2o的依赖

# 因为g2o不是常用库,要添加它的findg2o.cmake文件

LIST( APPENDCMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake_modules )

SET( G2O_ROOT/usr/local/include/g2o )

FIND_PACKAGE(G2O )

# CSparse

FIND_PACKAGE(CSparse )

INCLUDE_DIRECTORIES(${G2O_INCLUDE_DIR} ${CSPARSE_INCLUDE_DIR} )

 

同时,在代码根目录下新建cmake_modules文件夹,把g2o代码目录下的cmake_modules里的东西都拷进来,保证cmake能够顺利找到g2o。

 

目前能够想到的搭建内容就是这些,如果想到什么的话还会往里面添加。如有错误,请不吝赐教,小生在此谢过!

你可能感兴趣的:(Ubuntu)