在学习计算机视觉的特征点检测时,用到SURF和SIFT算法,遇到如下错误
Severity Code Description Project File Line Suppression State Error (active) identifier "SurfFeatureDetector" is undefined
上网查找原因为opencv3.3版本中不存在SURF和SIFT算法相关的函数,因为他们是存放在opencv_contrib目录下面的未稳定功能模块,所以如果我们想要使用这个目录的功能,就需要自己重新进行OpenCV的编译。步骤如下:
(一)准备工作
(1)下载opencv,地址https://opencv.org/releases.html,下载后安装(也就是解压)
解压的结果为(其中newbuild为自己新建的文件夹,为了放后面新编译的opencv)
(2)下载opencv_contrib,地址https://download.youkuaiyun.com/download/panpan_jiang1/10708179,解压后为
(3)下载Cmake工具
地址为https://cmake.org/download/
解压即可使用
(二)使用cmake生成OpenCV.sln
(1)打开cmake-gui\bin目录下的cmake-gui.exe工具:
(2)填写相应参数,包括:OpenCV源码目录和OpenCV.sln工程的存放目录
1. 点击右侧“Browse Source”按钮输入OpenCV源码所在路径
2. 点击右侧“Browse Build”输入生成的OpenCV工程存放目录
3. 点击左下角“Configure”按钮生成工程:
4. 第一次导出时需要设置后面用来编译此OpenCV.sln工程的VS的版本,这里我用的是VS 2015:
5.第一次编译完成之后,我们需要将额外的opencv_contrib加到工程中进行第二次编译,在配置表中找到“OPENCV_EXTRA_MODULES_PATH”,设置其参数值为open_contrib源码包中的modles目录:
6.设置完成之后点击Configure进行配置,不报错的话就进行第二次编译,第二次编译一般很快就能完成,然后点击Generate生成
7. 编译完成后,我们在资源管理器下查看上面设置的文件输出目录,发现目录下多出了很多文件,包括OpenCV.sln工程文件:
(三)用VS打开OpenCV.sln工程,编译生成Debug和Release库
(1)用VS 2015打开OpenCV.sln工程,在解决方案中可以查看工程目录:
(2)编译生成debug版本的库,记得在此之前要选择编译的平台信息,这就是编译生成debug版本和release版本的区别:
(3) 在解决方案中选中工程,右键选择Rebuild Solution:
(4)找到CMakeTargets中的INSTALL,然后右键选择“Project Only”-->“Build Only INSTALL”:
(四)把新的库文件配置到到项目中
(1)新建一个Win32项目,添加新的C++文件如图所示双击Microsoft.CPpp.x64.user进入配置界面
(2)VC++Directories-->Include Directories,添加:(新的lnclude在工程目录下的install目录中)
(2)VC++Directories-->Library Directories,添加:
(3)Linker-->Input-->Additional Dependencies,添加:
opencv_bioinspired330d.lib
opencv_bgsegm330d.lib
opencv_aruco330d.lib
opencv_calib3d330d.lib
opencv_ccalib330d.lib
opencv_core330d.lib
opencv_datasets330d.lib
opencv_dnn330d.lib
opencv_dpm330d.lib
opencv_face330d.lib
opencv_features2d330d.lib
opencv_flann330d.lib
opencv_fuzzy330d.lib
opencv_hdf330d.lib
opencv_highgui330d.lib
opencv_img_hash330d.lib
opencv_imgcodecs330d.lib
opencv_imgproc330d.lib
opencv_line_descriptor330d.lib
opencv_ml330d.lib
opencv_objdetect330d.lib
opencv_optflow330d.lib
opencv_phase_unwrapping330d.lib
opencv_photo330d.lib
opencv_plot330d.lib
opencv_reg330d.lib
opencv_rgbd330d.lib
opencv_saliency330d.lib
opencv_shape330d.lib
opencv_stereo330d.lib
opencv_stitching330d.lib
opencv_structured_light330d.lib
opencv_superres330d.lib
opencv_surface_matching330d.lib
opencv_text330d.lib
opencv_tracking330d.lib
opencv_video330d.lib
opencv_videoio330d.lib
opencv_videostab330d.lib
opencv_xfeatures2d330d.lib
opencv_ximgproc330d.lib
opencv_xobjdetect330d.lib
opencv_xphoto330d.lib