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