可通过github上下载,网上很多,找到tag标签,选择 OpenCV-4.5.3 进去后,找到 sourceCode.zip。然后点击下载。
如下:
下载地址
进来之后,点击 下图中的 tags 标签
也可以找台网络好的Linux云机器上直接输入 wget https://github.com/opencv/opencv/archive/refs/tags/4.5.3.zip 进行下载
下载地址
也是仿照上面的方式进行下载,由于opencv_contrib-4.5.3是opencv的一个模块,因此编译OpenCV时需要这个。
源码准备好的截图如下:
由于github时常打不开,导致下载不了上方的源码。这里提供了网盘下载的方式:
链接:https://pan.baidu.com/s/1nTKa72azGfCXJynqwhEeFw
提取码:14bz
下载完毕后解压下就行了。
配置好后,点击上图的Finish。
然后就自动开始解析CmakeList.txt文件中的配置,包括自动从当前电脑系统环境下查找CmakeList.txt文件中各种变量的符合要求的值,已经解析CmakeList.txt中的各个源文件是否存在。(自动识别),已经从第三方那里下载所需要的库。配置解析完毕后,会在中间 Name- Value 那片显示区域,会把解析后CmakeList.txt文件中各种变量的名称,已经从当前系统环境变量中查找的值及当前变量的状态都显示出来。
现在的开源项目基本上都是用cmake来进行管理。cmake就是一个项目管理工具。根据CmakeList.txt中的编写的规则来组织项目的构建步骤。一个大的开源项目下,会有多个模块,每个模块下又有各自的CmakeList.txt文件。但是开源项目的根目录只有一个CmakeList.txt。
根目录下的CmakeList.txt文件内会引入各个模块下的CmakeList.txt文件。这就有点类似于java中的 maven的作用。
这里我们把上图里底部打印出的内容粘出来看看。
Selecting Windows SDK version 10.0.22000.0 to target Windows #选择本机上适合的Windows SDK
10.0.22621. Detected processor: AMD64 #检测到本地的处理器架构Found PythonInterp: D:/software/python/python.exe (found suitable version “3.8.6”, minimum required is “2.7”) #检测到本机安装的python是3.8.6.而最小要求是2.7满足要求。如果需要将OpenCV用于python。这里需要把python加入系统环境变量Path中这里才能检测到。
下面的提示有个zip没有从网络上下载下来。
IPPICV: Download: ippicv_2020_win_intel64_20191018_general.zip
Try 1 failed
=======================================================================
Couldn't download files from the Internet. #不能够从互联网上下载此文件
Please check the Internet access on this host.
=======================================================================
CMake Warning at cmake/OpenCVDownload.cmake:202 (message):
IPPICV: Download failed: 6;"Couldn't resolve host name"
For details please refer to the download log file:
D:/vs_project/OpenCV/bulid_x64/CMakeDownloadLog.txt #查看这个日志文件,手动下载此文件
OpenCV Python: during development append to PYTHONPATH: D:/vs_project/OpenCV/bulid_x64/python_loader
Could NOT find PkgConfig (missing: PKG_CONFIG_EXECUTABLE)
FFMPEG: Download: opencv_videoio_ffmpeg.dll
Try 1 failed
.......................................
FFMPEG: Download: opencv_videoio_ffmpeg_64.dll
Try 1 failed
D:/vs_project/OpenCV/bulid_x64/CMakeDownloadLog.txt 中的内容:
根据日志文件可知有三个文件下载失败:
wget https://raw.githubusercontent.com/opencv/opencv_3rdparty/a56b6ac6f030c312b2dce17430eef13aed9af274/ippicv/ippicv_2020_win_intel64_20191018_general.zip
然后手动添加后uuid前缀,放到Windows的指定目录上。
另外两个:https://raw.githubusercontent.com/opencv/opencv_3rdparty/213fcd5d4897319a83207406036c4a5957fba010/ffmpeg/opencv_videoio_ffmpeg.dll 到 D:/vs_project/OpenCV/opencv-4.5.3/.cache/ffmpeg/bab661341c30862fa88627130219c0a5-opencv_videoio_ffmpeg.dll
https://raw.githubusercontent.com/opencv/opencv_3rdparty/213fcd5d4897319a83207406036c4a5957fba010/ffmpeg/opencv_videoio_ffmpeg_64.dll 到 D:/vs_project/OpenCV/opencv-4.5.3/.cache/ffmpeg/ac99f9767a83103c31709628af685924-opencv_videoio_ffmpeg_64.dll
也是按照上述方式下载,然后放到指定目录下。
下载比较慢…。待其下载完毕后放到指定目录下就行。
其实上面的这几个文件不下载,也不影响后续的操作。只是将来的exe,dll或者lib文件不包含这些功能罢了。
接下来说说红框里的设置:
接下来,进入到D:\vs_project\OpenCV\bulid_x64目录下,就可以看到通过cmake构建好的项目工程。里面可以看到.sln(解决方案文件)和大量的.vcxproj(工程文件),以及各个模块下也有.vcxproj文件。
这样通过cmake就把Visual Studio 2019 上的解决方案工程构建好了。
双击OpenCV.sln 会自动用Visual Studio 2019 打开。
执行ALL_BUILD命令(底层会调用VS MSBuild命令,对.vcxproj文件内容进行读取通过gl.exe执行编译及链接的整个过程)(release /x64)
注意
:虽然通过cmake新构建好的项目在D:\vs_project\OpenCV\bulid_x64目录下,但是OpenCV的源码并没有在bulid_x64目录下。所以是执行ALL_BUILD(对源码的实际编译时),原来的源码位置:D:\vs_project\OpenCV\opencv-4.5.3及其下的CMakeLists.txt文件还是需要被引用使用的。否则在ALL_BUILD会报错。
可以看到有的工程最后编译完后生成了lib库,有的生成了dll库,有的生成了exe文件。
它们都被放到了:D:\vs_project\OpenCV\bulid_x64\bin\Release目录下了。
接下来执行 INSTALL:
执行完毕后:会在D:\vs_project\OpenCV\bulid_x64目录下创建一个install目录
有时候,生成的dll和lib文件有多个,有时候只有几个。和有没有勾选BUILD_opencv_world有关:没有勾选这一项的话,会生成很多dll及lib文件。勾选的话,可能只生成一两个库文件。其中包括opencv_world453.dll。这个dll库包括了其他的dll库。
至此构建及编译结束!
个人总结
:开源项目发布时是通过CMake来管理项目结构的。但是通过cmake项目使用指定生成器 构建出的.sln工程和实际使用VS创建的.sln工程还不一样。我们进行二次开发的话,还是要在CMake来管理项目下开发。而这种构建出的.sln工程只是适用于来生成编译后的结果及发布结果。