前言:
计算机视觉后期使用及开发基本都为Linux系统,前期学习等基础功能还是在Windows下编写,本文总结并记录曾经遇见的那些坑。
OpenCV:https://github.com/opencv/opencv
OpenCV_contrib:https://github.com/opencv/opencv_contrib OpenCV的拓展库,版本一定要和OpenCV对应,选装
CMake:https://cmake.org
Visual Studio(VS):https://visualstudio.microsoft.com/zh-hans
注意!!!
老版本的VS如VS2019、VS2017等不能用
较新的CMake否则可能会出现如下问题
VS安装时勾选上使用C++的桌面开发,建议把通用Windows平台开发一并勾上(曾经出现过安装完后缺少C&C++的头文件)
打开CMake,设置好路径
其中,下载下来的OpenCV源码路径中一定要存在一个CMakeLists文件,如果路径不对,就会报CMake Error: The source directory “/opencv” does not appear to contain CMakeLists.txt.的错误。
点击config,看到自己安装的 visual studio 版本,点击finish。
等待编译完成。
正常情况下直接从GitHub上下载的源码中都会存在一些文件下载失败。
在存放编译文件的文件夹中会有一个CMakeDownloadLog文件,里面记录了缺少的文件以及下载的链接。
图中以"https://raw.githubusercontent.com/"链接为开头的就是下载文件的链接。国内直接下载的话极有可能下载失败。
可以通过这个网站下载: https://ghproxy.com/
根据cmake_download 后面的位置找到缺失文件的路径,替换文件
其中,如果链接打开后显示的是一个新的网页。
一定要通过右键另存为保存,再替换原文件,否则重新编译后会再次被覆盖。
当编译无错误后,CMakeDownloadLog显示内容如下图。
注意,按照这种方式编译完后的OpenCV有20多个G,可以选择一些部分不需要Configure,如:BUILD_DOCS、BUILD_EXAMPLES、BUILD_PACKAGE、BUILD_TESTS、BUILD_PERF_TESTS、BUILD_opencv_python。在 search 对话框中输入以上名称,然后取消这些的选中。
OpenCV官网对这部分模块的解释:
添加链接描述
然后点击Generate按钮。
直到下方出现
Configuring done Generating done
此时OpenCV基本库编译完成
在 search 对话框中输入OPENCV_EXTRA_MODULES_PATH,找到OPENCV_EXTRA_MODULES_PATH后在value中填入编译opencv_contrib解压目录中的modules路径
在search 中输入OPENCV_ENABLE_NONFREE ,在value值中点击选中。如果没有选中,那么类似SIFT已经被申请专利的方法无法使用。
然后点击Configure,在下方出现 Configuring done 之后,再检查一下CMakeDownloadLog里有无缺失的文件,点击Generate,和 opencv 基本库编译一样,CMake下方出现Configuring done Generating done,说明OpenCV_contrib 编译完成。
附加:
若要结合Qt使用,在Configure时勾选上WITH_QT
若要结合CUDA,在Configure时勾选上WITH_CUDA,此时必须要添加上OpenCV_contrib,这个会大幅度延长后续编译时间,同时,在windows环境下,cuda只能使用vs系列的编译器,譬如mingw、msys2之类的编译器都会报错
强烈建议勾选上BUILD_opencv_world,不然后续能累死!!!
点击Open Project,会使用之前选择的特定版本Visual Studio打开。
选择生成->批生成。在弹出的窗口里面选择的 debug 和release的ALL_BUILD和INATALL,然后点击“生成”。
该过程会需要较长时间。
生成结束之后,需要修改环境变量。环境变量在“此电脑”->“属性”->“高级系统设置”->“环境变量”,在用户变量里面的 Path 变量后面添加之前CMake设置的build目录\install\x64\vc17\bin(该路径根据VS版本来决定,VS2022是vc17,VS2019是vc16),确定,退出。
如果VS在修改环境变量之前就打开了,需要重启VS。
VS中右击项目->“属性”,
选择“所有配置” “所有平台”,配置属性中选择VC++目录。
编辑包含目录为
·························································
生成的 build 目录\install\include
生成的 build 目录\install\include\opencv2
·························································
编辑库目录为
·························································
生成的 build 目录\install\x64\vc16\lib
·························································
编辑包含目录和库目录之后,需要添加附加依赖项,此时需要分别针对 debug 和release两种模式添加。
打开 生成的build目录\install\x64\vc17\lib可以发现每个lib文件都有两种,一种是以d.lib结尾,另一种只比前一种少了一个d,只以.lib结尾。debug模式需要d.lib结尾文件,release模式需要.lib结尾文件,任何一种模式配置错误,就不能以该模式运行OpenCV。
这里就体现BUILD_opencv_world的作用了,在编译时勾选上BUILD_opencv_world时会将lib文件整理成1个。
配置完成后就可以开始写代码了。
P.S.
每次新建一个工程时需要重新配置一次环境,建议直接配置一个模板,每次使用的时候直接复制模板。