1.为何要编译opencv源码?
(1)想查看OpenCV自带的函数的源代码,比如函数cvCreateImage, 点击鼠标右键->转到定义,只能看到cvCreateImage的一个简单声明,而没有源代码。这是因为opencv将很多函数被加入了函数库,并被编译成了dll,所以只能看到函数申明,没法看到源代码。
(2)为何需要自行编译opencv3.4.0与opencv_contrib3.4.0
因为在3.0之后版本的Opencv对Sift、Sufer等新算法没有提供直接编译好的动态库来加载使用,因此必须自己编译。这是因为Sift、Sufer算法专利现在是属于哥伦比亚大学,因此opencv对这部分内容及“所谓的”不稳定模块全都放到opencv_contrib中。且只在它的Github中能够找到,opencv的官网上是没有的。因此对于想使用Sift、Sufer、双目立体匹配算法、结构光等新的算法及有专利权算法,需要自行编译。
选择不同的编译器类型,生成高度还原的OpenCV开发时的解决方案工程文件,欣赏OpenCV新版本中总计 六十六多万行的精妙源代码。我们可以对其源代码进行再次编译,得到二进制文件,或者修改原版官方的OpenCV代码,并编译后为自己所用,深入理解OpenCV源码。
2.系统环境
系统:win10 64位
其它:VS2015 CMake 3.12.2
3.opencv3.4.0源码下载
下载opencv3.4.0与opencv_contrib3.4.0相对应的版本。
1)Opencv3.4.0版本源码(.zip文件):https://github.com/opencv/opencv/releases
2)opencv_contrib3.4.0版本源码(.zip文件):https://github.com/opencv/opencv_contrib/releases
下载完成后,解压到自定义的安装目录下(D:\thirdLib\opencv\opencvTest)。
4.Cmake3.12.2编译Opencv3.4.0
camke官网:http://www.cmake.org/ 下载安装cmake即可。
解压后修改opencv-3.4.0为opencv340,并在该文件夹中新建文件夹build。
1)打开CMake的gui界面,按下图所示操作:
源码路径“Where is the source code”选择刚才解压后的Opencv3.4.0源码,本文解压到了D:\thirdLib\opencv\opencvTest\opencv340路径下,这个需要按照你的路径自行选择。
编译输出路径“Where to build the binaries”,本文新建文件夹“build”路径为D:\thirdLib\opencv\opencvTest\opencv340\build,同样这个需要按照你的路径自行选择。
2)单击“configure”,弹出选择编译器界面,选择Visual Studio 14 2015 win64 ,单击“Finish”即可开始编译。
3)这个过程会出现很多错误需耐心反复编译,主要原因是需要从国外网站下载文件,若下载失败就编译不通过,以红色显示。
若失败,可在编译输出路径D:\thirdLib\opencv\opencvTest\opencv340\build中打开CMakeDownloadLog.txt文件里面有下载失败文件的连接及下载文件要保存到本地的路径。
可自己下载并放到指定的文件夹中。最常下载失败的:opencv_ffmpeg.dll opencv_ffmpeg_64.dll ffmpeg_version.cmake及ippicv_2017u3_win_intel64_general_20170822.zip
过程中可能出现如下报错:
CMake Error at cmake/OpenCVFindLibsVideo.cmake:221 (include):
include could not find load file:
D:/thirdLib/opencv/opencvTest/opencv340/build/3rdparty/ffmpeg/ffmpeg_version.cmake
Call Stack (most recent call first):
CMakeLists.txt:602 (include)
【不知道什么原因,过几天重新configure时,上面的错误消失了,成功下载了上面的文件】
成功下载的D:\thirdLib\opencv\opencvTest\opencv340\.cache文件夹中如下:
ffmpeg文件夹中如下:
4)同时需要勾选 BUILD_opencv_world:主要是把所有的lib文件都弄到一个opencv_world340d.lib中方便配置,若不勾选在最后会产生大概38个.lib文件。
勾选 BUILD_EXAMPLES:编译OPencv自带的例程。
完成后再次单击“Configure”即可。单击“Configure”直到没有红色显示为止。
点击”Generate“完成工程创建。在D:\thirdLib\opencv\opencvTest\opencv340\build下打开.sln工程,进行编译,结果如下。【此时已编译完opencv的源码】
5.Cmake3.12.2编译opencv_contrib3.4.0
在cmake界面,OPENCV_EXTRA_MODULES_PATH 选择为解压的opencv_contrib3.4.0文件中的“modules”即D:/thirdLib/opencv/opencvTest/opencv_contrib340/modules 。注意斜杠方向。如下图:
单击“Configure”,
【同样需要到build中的CMakeDownloadLog.txt中找到下载链接自行下载,并放到指定的位置。此部分下载失败常有:boostdesc_bgm.i boostdesc_bgm_bi.i boostdesc_bgm_hd.i boostdesc_binboost_064.i 及face_landmark_model.dat 同样找到下载并替换。(这里可能需要多次的反复才能完成,需要耐心)】
成功后出现Configuring done【红色消失】;
点击”Generate“完成工程创建。这时候就编译好了opencv-3.4.0 + opencv_contrib-3.4.0的源码。可以打开.sln工程查看代码。