前一段时间需要用到opencv 2.x中的nonfree.hpp,然后发现自己装的opencv3.0没有包含这个,于是得用cmake重新将oepncv编译,将contrib包加入其中。想写一篇文章来记录,之后就不用到处翻找啦。
建议各位看客看完整篇博客后再进行操作,因为我的错误是按操作顺序来记录的xD。
前期准备:
我使用的是opencv3.0.0,cmake用的是3.10.0,contrib包也是下的opencv_contrib3.0.0,vs版本是2013。
下面给出下载地址
opencv 3.0.0: https://sourceforge.net/projects/opencvlibrary/files/opencv-win/
opencv_contrib 3.0.0: https://github.com/opencv/opencv_contrib/tree/3.0.0
一般来说opencv是什么版本,就对应什么版本的contrib包。cmake的话可以去官网下。
那么现在开始重新编译。
在cmake中进行操作:
首先打开cmake
在第一行,source code那写入opencv安装后(下载下来是一个exe文件)的路径中的sources文件路径。
第二行Where to build the binaries中填入你希望把重新编译完成的文件放入的路径,比如我希望把它放在Opencv_w_contrib中。要注意,这个目录不能含有中文。
接下来点击左下角的Configure,会弹出这个窗口:
这里是选择编译器,因为我用的是vs2013,那么这里就选择visual studio 12 2013,其他的默认就好,最后点Finish。
如果选的编译器错误或者不存在,cmake就会报错,这时候请选择对应的编译器,然后点左上角的File-》Delete Cache将之前的缓存清空再重新来一次。
如果是显示CMAKE_C_COMPILER-NOTFOUND 那么可能是vs的模块不全,尝试修复一下vs再试试
成功之后会看到一个Configure done,表示可以进行下一步了。
会看到一片红底的文件名
先不用理会它们,找到一个叫OPENCV_EXTRA_MODULES_PATH的地方
z在这里写入解压后的opencv_contrib包中的modules文件路径,例如:E:/opencv_contrib3.0.0/modules
填好路径之后再点击Configure按钮,会发现有一部分文件名底色变为白色。
持续点击Configure按钮,直到没有红底文件名,如下图:
Config时可能会出现的错误(现在见到过的):
1.下载错误,原因是因为ocv_download函数使用时把PACKAGE错写成filename
解决方法可看此博:http://blog.csdn.net/qsy2000/article/details/70158537
看到全白的文件后,就可以点击Generate按钮进行生成了,当看到Generate done 的提示时,在cmake的操作就结束了。
接下来是在VS中的操作:
打开刚刚生成文件的目录(就是上面填的目录),找到Opencv.sln,用vs打开。
然后再在“解决方案Opencv”右键点击 “生成解决方案”
如果这时弹出一个
解决方法是:
具体说就是打开位于opencv_contrib-3.1.0\modules\bioinspired\src\opencl
文件夹:
打开retina_kernel.cl
,把注释的//*********
改成别的或者删掉即可。
此错误可以参照 http://blog.csdn.net/github_32886825/article/details/53347507?locationNum=6&fps=1
如果debug和release都没问题,都显示ok的话。
找到一个叫INSTALL的项目,右键-》生成,成功后会在目录中找到一个install文件夹,里面就是包含了contrib的opencv3.0.0了
请根据自己需要的是Debug还是Release进行选择。
接下来就是按照opencv2.x的办法给vs配置了
要添加的lib如下(备忘)
opencv_aruco320.lib
opencv_bgsegm320.lib
opencv_bioinspired320.lib
opencv_calib3d320.lib
opencv_ccalib320.lib
opencv_core320.lib
opencv_datasets320.lib
opencv_dnn320.lib
opencv_dpm320.lib
opencv_face320.lib
opencv_features2d320.lib
opencv_flann320.lib
opencv_fuzzy320.lib
opencv_highgui320.lib
opencv_imgcodecs320.lib
opencv_imgproc320.lib
opencv_line_descriptor320.lib
opencv_ml320.lib
opencv_objdetect320.lib
opencv_optflow320.lib
opencv_phase_unwrapping320.lib
opencv_photo320.lib
opencv_plot320.lib
opencv_reg320.lib
opencv_rgbd320.lib
opencv_saliency320.lib
opencv_shape320.lib
opencv_stereo320.lib
opencv_stitching320.lib
opencv_structured_light320.lib
opencv_superres320.lib
opencv_surface_matching320.lib
opencv_text320.lib
opencv_tracking320.lib
opencv_video320.lib
opencv_videoio320.lib
opencv_videostab320.lib
opencv_xfeatures2d320.lib
opencv_ximgproc320.lib
opencv_xobjdetect320.lib
opencv_xobjdetect320.lib
另外,这样还有一个小缺陷,并不影响使用,就是有时候会弹出
该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失
这样的警告,想要消除这个警告可以参考这个
http://blog.csdn.net/qq_36226393/article/details/77725493
到这里,就算是大功告成了