OpenCV是一个开源图像库,不仅在ORB-SLAM2中被使用,在配置ORB-SLAM2依赖的其他库中也有所运用,因此我们首先配置OpenCV.
OpenCV下载的地址是:http://opencv.org/
至于版本,原先ORB-SLAM2是用2.4.x的,事实上我们用3.x的版本也是可以的。本人比较喜欢较新的东西,因此我们就用3.x的吧。这两者的差别在于一个no_free_module,(似乎是)从3.0开始,这个模块从OpenCV消失,里边包含了诸如sift、surf的一些API,但这不妨碍我们配置ORB-SLAM2,如果以后需要用到这些算子的时候,我们可以从2.4.x版本的代码中抠出来。(不过3.x应该也有才对,我有点忘了)
那么版本是3.x,下载window版本的,是一个安装程序,我们将其安装在众库所在之处。由于OpenCV安装后的文件夹都叫opencv,因此我们为其建立一个文件夹放,取个能区分版本的名字,如我的:”OpenCV3_1”.
OK,OpenCV算是配置好了(注意了,我们默认忽略运行环境配置),还是挺傻瓜的。但为了能往后给其他的库使用,我们为其建立一个属性表吧。
打开vs2017,新建一个控制台程序,步骤随便来,我们主要为了建立个属性表。
完成之后,右键”属性管理器“(注意,不是”属性”,vs默认不打开此窗口,请在上方导航->视图中寻找)中的项目->添加新的属性表,打开新建属性表的窗口,设置好名称和路径。
注意,名称要保留着后缀.props,没有后缀虽然vs中也可以用,但是显示在电脑里,就是个很丑的不知其用的白色文件图标,vs不会帮我们自动补充后缀(在新建.c和.h的时候倒是会)。
路径一般会被设置为本工程所在目录,这是因为不同工程所需要的库往往不同。我们配的OpenCV是为众多工程服务的,因此我们把路径改在专门放属性表的地方吧。多说一句,命名方式最好能体现版本号,以及是否是debug或是release版本,如果是debug版本,我们在名称末尾(当然是后缀前)加个’d’.
OK,现在我们建立了一个空的属性表,在”属性管理器”中,我们的项目里可以看到它就在那。你会发现那里有几个文件夹在那,分别对应不同的编译模式,这里有个细节,如果你是右键项目来新建属性表的,所有模式下,都会添加那个属性表,他们均指向同一个东西。如果是右键文件夹(或者叫“筛选器”)的,那么只会在那个模式下添加属性表。
双击该属性表,我们要补充的内容有三处:
记住,我们配置所有库,基本思路都是这样的。有人说,还有个dll的配置呢。那是运行时的问题,我们待会再说。
点击左边导航,到”VC++目录”,要修改的即是”包含目录”和”库目录”,前者让我们顺利include库的头,后者让我们顺利将其接口链接进我们的程序。
上面的内容只是示意。有个细节,属性表中黑体部分的意思是,此处内容非默认内容的意思。
双击以上右边的栏目,可以编辑目录,目录可以追加多条。打开OpenCV所在目录,将
- XXX/opencv/build/include
- XXX/opencv/build/include/opencv2
- XXX/opencv/build/include/opencv
添加至”包含目录”中(XXX为你的根目录)
将XXX/opencv/build/x64/vc14/lib添加至”库目录”。
点击”应用”一下,然后点击左边导航到链接器->输入,我们需要将.lib的全称(包括后缀)写在”附加依赖项“。
这个是OpenCV提供给我们程序链接的接口,它的全称去哪找呢?还记得刚才的库目录吗,链接的时候vs就会去库目录下寻找库文件.lib进行链接,所以名称可以在库目录下找到:opencv_world310.lib
注意到,该目录下有另外一个.lib文件,可以发现其名字后带了个d,说明它是debug版本的,一般来说,我们不要将不同模式版本的同一个库同时链接,因此就不填它。老版本的opencv有很多个.lib文件,添加的时候就很烦,因此我们用新版本也是有道理的。
到这里,点”确定”,该属性表就配置好了。想要试试看是否成功?那么在这个工程的main.cpp中随便写点代码吧:
#include
using namespace cv;
int main()
{
Mat image;
return 0;
}
注意,编译的时候,vs上中部的调试器选择,需要调为release x64的,并且保证,”属性管理器”在该模式下,包含了刚才我们新建的属性表。
此时运行是会报错的,没错,就是缺少dll,这个时候我们可以通过添加系统变量的方法来做,但鉴于在(1)中谈到的利弊,我们采取以下的方法:
点击右方的”解决方案资源管理器”->右键项目->属性->调试。双击”环境”,弹出对话框,输入path=XXX/opencv/build/x64/vc14/bin/;
如配置系统环境一样,path的值可以是多个路径,使用英文冒号隔开。我们发现在该目录下,就有运行所用的dll了。
点击vs上方启动调试按钮,看到一个黑框一闪而过,其他什么都没有的话,那就大功告成了。