参考Silvia博主对opencv的配置方法附上原文链接。但在编译时遇到一些问题,比如Realease下会中断,或者提示缺失dll文件等。下面将针对各种问题提出解决方法。
1.Release下点击功能实现的按钮产生中断
如图所示,提示dll文件错误,具体是哪种dll文件没有区别。其原因是依赖库lib文件需要分开包含,即将后面带d的文件在debug中包含,不带d的文件在release中包含。在项目->属性中会发现上面可以选择debug还是release。选择release,链接器->输入->附加依赖项,取消下面的从父级或项目默认设置继承,只复制继承的值中的xxx249后面不带d!!!的lib,即(
opencv_objdetect249.lib
opencv_ts249.lib
opencv_video249.lib
opencv_nonfree249.lib
opencv_ocl249.lib
opencv_photo249.lib
opencv_stitching249.lib
opencv_superres249.lib
opencv_videostab249.lib
opencv_calib3d249.lib
opencv_contrib249.lib
opencv_core249.lib
opencv_features2d249.lib
opencv_flann249.lib
opencv_gpu249.lib
opencv_highgui249.lib
opencv_imgproc249.lib
opencv_legacy249.lib
opencv_ml249.lib
粘贴到空白区,最后应用。同理,对debug也进行操作,但只粘贴带d的lib,即
opencv_ml249d.lib
opencv_calib3d249d.lib
opencv_contrib249d.lib
opencv_core249d.lib
opencv_features2d249d.lib
opencv_flann249d.lib
opencv_gpu249d.lib
opencv_highgui249d.lib
opencv_imgproc249d.lib
opencv_legacy249d.lib
opencv_objdetect249d.lib
opencv_ts249d.lib
opencv_video249d.lib
opencv_nonfree249d.lib
opencv_ocl249d.lib
opencv_photo249d.lib
opencv_stitching249d.lib
opencv_superres249d.lib
opencv_videostab249d.lib
上述操作完成后如果编译时提示缺少dll,就把opencv目录下提示缺少的那个dll放到项目中去。比如我自己的路径D:\Microsoft Visual Studio 12.0\Opencv\opencv\build\x86\vc12\bin,在这个文件夹中找到对应缺少的dll文件,将其复制到项目中如图所示。注意项目是32位的就再x86文件夹中,否则在x64中。vc12表示vs2013版本,其他就往前退一版。
到此应该就解决了上述问题。
2.与opencv中的类重名
以我自己为例,项目中本身定义了Vec的模板类,但opencv中也有Vec模板类。
方法一:修改类名
vs2013安装了番茄助手,直接右键类rename即可,根据提示一步步往下做。
方法二:添加命名空间
opencv中的Vec类是有cv这个命名空间的,而项目中的Vec类是没有单独添加的,可以通过添加一个新的命名空间用{}圈起,调用时注意带上命名空间即可。如vc::Vec
方法三:只在cpp文件中包含opencv的头文件
前两个方法是解决一般类重名问题,但由于我整个项目是基于自定义的Vec类建立的,采用前两种方法修改量巨大。。因此,对于opencv我只在cpp文件中,需要调用到该库的时候去包含,并且在调用时添加cv::作用域,当然也可以直接using namespace cv;这就可以很好地避免冲突问题。