Cmake OpenCV源码中出现的问题

前言

本人是在Windows64位环境下进行的OpenCV源码编译,GPU是NVIDIA Geforce GTX 1050,安装的CUDA版本是10.0,安装教程是借鉴的该篇文章,同时安装完成之后还有个测试用例的借鉴。Cmake官网下载地址,下载的版本是cmake-3.19.2-win64-x64,编译器是VS2017。Cmake OpenCV源码中出现的问题_第1张图片

OpenCV源码在官网下载对应的Source源码即可,本人下载的是 3.4.1版本的源码。
具体的编译安装教程可以借鉴这篇文章。

问题总结

说实话,网上的安装教程有很多,但是内容都差不多,但是安装时每个人出现的问题又都不一样,我在安装的时候应该是被折磨了两周,试过不同的Cmake版本以及OpenCV版本,最后总算是重新编译好了,希望之后的实验能够顺利些。

问题1

首先在Cmake中选中opencv源码以及编译好的源码的保存路径,随后选择正确的64位VS编译器
Cmake OpenCV源码中出现的问题_第2张图片
这一步将是之后能否在VS中编译而不报错的关键,因为不选的话将会默认是32位。

问题2

按下Configure键,此时下方操作栏中可能会出现ffmpeg以及ippicv无法下载的红色提示,同时如下两个文件夹内的文件大小都是0KB(这里我的都是已经下载好了的),说明并没有下载成功。
Cmake OpenCV源码中出现的问题_第3张图片
Cmake OpenCV源码中出现的问题_第4张图片

这是因为OpenCV在编译源码时需要从网上下载一些文件,Windows上可以这样办:
上https://www.ipaddress.com查一下raw.githubusercontent.com的ipv4地址,比如我现在查到的是199.232.68.133。
使用管理员权限打开C:/Windows/System32/hosts文件,添加一行
199.232.68.133 raw.githubusercontent.com。重新Configure一次即可。

问题3

出现红色编译选项之后,将BUILD_PERF_TESTS以及BUILD_TESTS两个不必要的选项去除,这两个会很大程度的影响编译时间,随后选中WITH_CUDA,注意不要在OPENCV_EXTRA_MODULES_PATH中添加opencv_contrib-master的modules路径,以及不要选中生成Build_opencv_world,前者将会与opencv源码所生成的modules中有很多重复,而且大部分也不是我们所需要的。
更重要的原因是这两个组件(更大的可能性是因为前者)会在第二次Configure以及Generate时报错。
报错内容是:Could NOT find PkgConfig (missing: PKG_CONFIG_EXECUTABLE)
这个错误很难解决,网上也找不到相应的资料,我也是觉得自己应该用不上它们就没有加上,没想到最后成功了。

问题4

第一次Configure之后Cmake窗口最下方会出现Configure done,继续Configure,这时红色选项如果编译不出错的话将会变为白色,同时Configure done再次出现。随后点击Generate,出现Generate done,这时Cmake就已经完成,点击Open Project,这时编译器将会是64位的,也就是我们之前选中的。点击CMakeTargets中的ALL_BUILD,Debug,右键生成,需要等待,等待时间由电脑处理器所决定,一般要两个小时左右。
编译好的静态库以及动态库
Cmake OpenCV源码中出现的问题_第5张图片
Cmake OpenCV源码中出现的问题_第6张图片

编译完成之后,可以打开上述安装教程的测试用例
将opencv_core341d.lib文件放在C盘System32文件夹之下。同时需要清除之前VS设置的包含目录,库目录以及附加依赖项,在视图->其它窗口->属性管理器->Debug|x64下的Microsoft.Cpp.x64.user右键属性中修改项目继承的包含目录,库目录以及附加依赖项,将以前的OpenCV相关设置清除,
添加包含目录:
I:\opencvFactory\rebuild2\install\include
以及库目录:
I:\opencvFactory\rebuild2\lib
I:\opencvFactory\rebuild2\lib\Debug
添加相关依赖项:
opencv_core341d.lib
opencv_calib3d341d.lib
opencv_cudaarithm341d.lib
opencv_cudabgsegm341d.lib
opencv_cudacodec341d.lib
opencv_cudafeatures2d341d.lib
opencv_cudafilters341d.lib
最后是本人的测试效果图:
Cmake OpenCV源码中出现的问题_第7张图片
原图:
Cmake OpenCV源码中出现的问题_第8张图片
追忆留在我年少青春里的那个男人。

你可能感兴趣的:(cmake,opencv,windows)