由于在学习图像识别中的特征点检测中,需要用到Surf和Sift算法,但是这两个算法在OpenCV 3.1.0的Release版本中并不存在,因为他们是存放在opencv_contrib目录下面的未稳定功能模块,所以如果我们想要使用这个目录的功能,就需要自己重新进行OpenCV的编译。

 

一、准备工作:

1.下载OpenCV安装包:https://sourceforge.net/projects/opencvlibrary/files/opencv-win/3.0.0/

        安装过程实际上就是解压过程,安装完成后得到:

        

opencv 4 contribute模块单独编译 opencv的编译_OpenCV

2.下载opencv_contrib源码:https://github.com/Itseez/opencv_contrib

        下载之后直接解压,得到源码目录:

        

3.下载cmake-gui工具:http://www.cmake.org/cmake/resources/software.html

 

opencv 4 contribute模块单独编译 opencv的编译_ide_02

        下载完成后,直接解压即可使用,不必安装。

 

二、使用cmake生成OpenCV.sln:

1.打开cmake-gui\bin目录下的cmake-gui.exe工具:

   

opencv 4 contribute模块单独编译 opencv的编译_解决方案_03

2.填写相应参数,包括:OpenCV源码目录和OpenCV.sln工程的导出目录,开始导出OpenCV.sln工程:

    

opencv 4 contribute模块单独编译 opencv的编译_解决方案_04

    第一次导出时需要设置后面用来编译此OpenCV.sln工程的VS的版本,这里我用的是VS 2015:

    

opencv 4 contribute模块单独编译 opencv的编译_ide_05

    设置完成之后点击“Generate”开始生成工程:

    

opencv 4 contribute模块单独编译 opencv的编译_解决方案_06

3.第一次编译完成之后,我们需要将额外的opencv_contrib加到工程中进行第二次编译,在配置表中找到“OPENCV_EXTRA_MODULES_PATH”,设置其参数值为open_contrib源码包中的modles目录,我的目录是“E:\OpenCV\tools\opencv_contrib-master\modules”:

    

opencv 4 contribute模块单独编译 opencv的编译_OpenCV_07

    设置完成之后点击Configure进行配置,不报错的话就进行第二次编译:

    

opencv 4 contribute模块单独编译 opencv的编译_解决方案_08

    第二次编译一般很快就能完成:

    

opencv 4 contribute模块单独编译 opencv的编译_OpenCV_09

    编译完成后,我们在资源管理器下查看上面设置的文件输出目录,发现目录下多出了很多文件,其实就是OpenCV.sln工程文件:

    

opencv 4 contribute模块单独编译 opencv的编译_OpenCV_10

 

三、用VS打开OpenCV.sln工程,编译生成Debug和Release库:

1.用VS 2015打开OpenCV.sln工程,在解决方案中可以查看工程目录:

    

opencv 4 contribute模块单独编译 opencv的编译_ide_11

2.编译生成debug版本的库,记得在此之前要选择编译的平台信息,这就是编译生成debug版本和release版本的区别:

    

opencv 4 contribute模块单独编译 opencv的编译_OpenCV_12

在解决方案中选中工程,右键选择重新生成解决方案:

    

opencv 4 contribute模块单独编译 opencv的编译_OpenCV_13

    

opencv 4 contribute模块单独编译 opencv的编译_ide_14

3.找到CMakeTargets中的INSTALL,然后右键选择“仅限于项目”-->“仅生成INSTALL”:

    

opencv 4 contribute模块单独编译 opencv的编译_解决方案_15

    然后,在工程目录下的install目录中,可以看到生成了一堆文件:

    

opencv 4 contribute模块单独编译 opencv的编译_ide_16

 

四、把新的库文件配置到到项目中:

 

  1. VC++目录-->包含目录,添加:
    D:\opencv3\opencv\mybuild\install\include
  2. VC++目录-->库目录,添加:
    D:\opencv3\opencv\mybuild\install\x86\vc12\lib
    D:\opencv3\opencv\mybuild\install\x86\vc12\staticlib
  3. 链接器-->输入-->附加依赖项,添加: (下面添加的release的版本,注意添加的库与编译选项要一致)

 

opencv_aruco310.lib
 opencv_bgsegm310.lib
 opencv_bioinspired310.lib
 opencv_calib3d310.lib
 opencv_ccalib310.lib
 opencv_core310.lib
 opencv_datasets310.lib
 opencv_dnn310.lib
 opencv_dpm310.lib
 opencv_face310.lib
 opencv_features2d310.lib
 opencv_flann310.lib
 opencv_fuzzy310.lib
 opencv_highgui310.lib
 opencv_imgcodecs310.lib
 opencv_imgproc310.lib
 opencv_line_descriptor310.lib
 opencv_ml310.lib
 opencv_objdetect310.lib
 opencv_optflow310.lib
 opencv_photo310.lib
 opencv_plot310.lib
 opencv_reg310.lib
 opencv_rgbd310.lib
 opencv_saliency310.lib
 opencv_shape310.lib
 opencv_stereo310.lib
 opencv_stitching310.lib
 opencv_structured_light310.lib
 opencv_superres310.lib
 opencv_surface_matching310.lib
 opencv_text310.lib
 opencv_tracking310.lib
 opencv_ts310.lib
 opencv_video310.lib
 opencv_videoio310.lib
 opencv_videostab310.lib
 opencv_xfeatures2d310.lib
 opencv_ximgproc310.lib
 opencv_xobjdetect310.lib
 opencv_xphoto310.lib
 ippicvmt.lib

4、关于imread的问题。如果图片名称是存在txt文档中,用readImageLists方法提取到list列表时,要特别注意txt文档的换行符必须是“UNIX 终束符 -LF"。否则读取到的文件名会多出"\r"字符,导致读取图像文件失败。