时间为友,记录点滴。
在做SIFT代码是,忽然发现一件事情,我们之前虽然提过如何编译OpenCV的源码,但只是为了了解代码,今天终于可以拿来实操一下。分享一下我的环境,以及中间遇到的问题。
重要的事情写在前面
如下是我的环境版本号,如果你在配置的时候有问题,可以把环境恢复的跟我一模一样,如果还是有问题,那肯定就是网络的问题(在cmake中会download一些关键文件)。
- 主机系统: Win10 64Bit(Win7之前做过,也Ok)
- Visual Studio: 2017(VC15)
- OpenCV:4.1.1
- Opencv_contrib:4.1.1(这个版本一定要跟OpenCV保持一致)
- CMAKE:3.14.5
- Python:3.7
注意:
1、全程路径里面不要出现中文。
2、挑选一个网络好的时刻工作。
第一步:Download OpenCV 源码
如果往前翻一翻,我们曾经介绍过相关内容。
lowkeyway:(四)源码和编译zhuanlan.zhihu.com今天只讲步骤,以及过程中可能遇到的问题。
1、进入OpenCV Github官网
opencv/opencvgithub.com2、不要直接clone,找release。
3、 找到我们的目标版本, 4.1.1
4、解压到当前目录
第二步:Download 三方扩展模块
1、进入OpenCV Github根目录
OpenCVgithub.com2、找到opencv_contrib仓
3、老规矩,不要直接clone,先进release
4、找跟刚才下载的OpenCV源码对应的一模一样的版本,4.1.1
5、解压到当前目录
第三步、下载CMAKE
1、先进CMAKE官网的DOWNLOAD界面
下拉到底,找到Older Releases。当然,如果你知道CMAKE的github地址可以直接去。
2、找到我们想要的版本, 3.13.5
对于开发来说,不要总想尝试最新版本,合适的才是最好的。
3、msi是需要安装的,没什么难度,一路next就可以了。
4、露个脸
完美,来个合照先(新建一个BuildFile目录,给后面CMake编译用)。
我整理到了连接如下:
//download.csdn.net/download/lowkeyway/11972238
第五步、CMAKE编译OpenCV源码
1、加载源码,指定输出目录
听说最好用按钮选,别直接复制路径。吓得我战战兢兢。
- 选择好OpenCV源码路径(还记得上图中带CMakeList的路径吗?)
- Build Bin目录最好在OpenCV的同级目录自己创建一个(没有要求,就是好找些)
2、开始Configure
3、再次Configure,完美主义。
configure的时间比较长,一般15~30分钟不等。一定要网络畅通。
4、Generate
Generate的时间就非常短了。
第六步:CMAKE编译opencv_contrib源码
1、增加opencv_contrib目录(别忘了使能NONFREE)
重新配置一下。
- 使能OPENCV_ENABLE_NONFREE(第三方里面有不免费的东西啊,比如咱们的SIFT)
- 选择OPENCV_FORCE3RDPARTY_BUILD的路径(就是opencv_contrib-4.1.1/modules)
然后再来一遍config
2、开始Configure
3、再次Configure,完美主义
4、Generate。
第七步:编译工程
1、 打开OpenCV.sln工程
执行完上面的步骤,看一下BuildFile目录,是不是多了好多文件?我们找到OpenCV.sln文件,用VS2017打开。
2、先全编一遍
管他三七二十一,全编一遍最保险,这个步骤也比较费时。(15~30分钟again)
- 问题一:C1083 Cannot open include file: 'vgg_generated_120.i': No such file or directory opencv_xfeatures2d
找不到vgg_generated_120.i/boostdesc_bgm.i等文件
如果你在CMAKE编译的时候,没有自定义模块。那么原因是你网络的问题,在download这些文件的时候超时了。
没关系在网上、或者在CMAKE的log中找到下载链接。手动把文件下载下来,放在opencv_contrib/modules/xfeatures2d/src/目录下即可。
要重新去CMAKE下面configure&generate一遍
问题二:LNK1104 无法打开文件“python37_d.lib”
这个是因为当时安装Python的时候,没有选择debug版本,而我们现在的工程编译的是debug导致的。
没关系,在网上、或者把Python重新安装的时候,下载一个即可。放在跟你的python37.lib同级目录即可(我的是Continuumanaconda3libs)。
我试过,直接把release版本的python37.lib拷贝重命名为python37_d.lib不好使。
当然,如果你不想找链接,我也准备好了:
//download.csdn.net/download/lowkeyway/11972255
3、编译INSTALL
在CMakeTargets下面找到INSTALL,右键有仅用于项目->仅编译INSTALL
4、查看生成文件
最终生成的文件在Binfileinstall文件夹下:
第八步:环境变量
把刚生成的*Binfileinstallx64vc15bin作为环境变量加进入(如果之前有OpenCV的就替换之前的,切记!)。
第九步:配置VS
好了,编译完成后,我没就可以用自己库文件啦!
1、随便打开一个我们之前的工程
- 确保Debug + x64 配置
- 菜单栏->视图->其他窗口->属性管理器(View->Other Windows->Property Manager)
- 右键Debug|x64->配置(Properties)
2、 增加编译头文件包含目录
- BinFileinstallincludeopencv2
- BinFileinstallinclude
3、增加编译库文件包含路径
- Binfileinstallx64vc15lib
4、增加链接的库文件包含路径
提示:
- 在目录空白处,同时按Shift+鼠标右键,选择超级终端(powershell),可以执行ls *.lib。
- 或者用普通shell执行dir /b *.lib *>0.txt,在0.txt中查看也可以
- opencv_aruco411d.lib
- opencv_bgsegm411d.lib
- opencv_bioinspired411d.lib
- opencv_calib3d411d.lib
- opencv_ccalib411d.lib
- opencv_core411d.lib
- opencv_datasets411d.lib
- opencv_dnn411d.lib
- opencv_dnn_objdetect411d.lib
- opencv_dpm411d.lib
- opencv_face411d.lib
- opencv_features2d411d.lib
- opencv_flann411d.lib
- opencv_fuzzy411d.lib
- opencv_gapi411d.lib
- opencv_hdf411d.lib
- opencv_hfs411d.lib
- opencv_highgui411d.lib
- opencv_imgcodecs411d.lib
- opencv_imgproc411d.lib
- opencv_img_hash411d.lib
- opencv_line_descriptor411d.lib
- opencv_ml411d.lib
- opencv_objdetect411d.lib
- opencv_optflow411d.lib
- opencv_phase_unwrapping411d.lib
- opencv_photo411d.lib
- opencv_plot411d.lib
- opencv_quality411d.lib
- opencv_reg411d.lib
- opencv_rgbd411d.lib
- opencv_saliency411d.lib
- opencv_shape411d.lib
- opencv_stereo411d.lib
- opencv_stitching411d.lib
- opencv_structured_light411d.lib
- opencv_superres411d.lib
- opencv_surface_matching411d.lib
- opencv_text411d.lib
- opencv_tracking411d.lib
- opencv_video411d.lib
- opencv_videoio411d.lib
- opencv_videostab411d.lib
- opencv_xfeatures2d411d.lib
- opencv_ximgproc411d.lib
- opencv_xobjdetect411d.lib
- opencv_xphoto411d.lib
环境验证,实验。
好 大工告成,让我们试一试自己的lib好用不。
找一个需要xfeature2d模块的代码,对就是上一章的SIFT:
#include
证明环境是没有问题的!
Python 环境
因为我一直都是用Anaconda开发,所以Python的环境相对来说就容易一些(准确的说,是不用配置。)
如果你遇到的问题是:
Set OPENCV_ENABLE_NONFREE CMake option and rebuild the library in function 'cv::xfeatures2d::SIFT::c
那么要么是因为你安装的是opencv-python,或者没有安装正确opencv-contrib-python的版本。
如果是这样,你可以先卸载本地的cv2,方法为(要看你当时安装的是opencv-python还是opencv-contrib-python):
pip uninstall opencv-python
或
pip uninstall opencv-contrib-python
然后,找比较老的版本,比如:
pip install opencv-contrib-python==3.4.2.17
这样,C:ProgramDataAnaconda3Libsite-packagescv2目录就会被更新,我们测试一下环境:
#!/usr/bin/env python