OpenCV4.4, CMake, VS2017的环境部署

基础环境

首先确保你已经下载了下面的软件/安装包:

  1. OpenCV 4.4 下载完后,解压得到opencv文件夹,将其重命名成opencv-4.4,目录有两个文件夹buildsources
  2. 安装Visual Studio2017
  3. 安装CMake(推荐3.17.4)
  4. 下载与OpenCV 4.4版本一致的opencv-contrib,将opencv-contrib/module目录下的module文件夹重名命成contrib并将其复制到opencv-4.4/sources

后续的操作尽量一致

CMake编译OpenCV4.4

  1. 打开CMake的GUI界面,并将sourcesbuild(推荐使用build目录)两个目录配置到如图位置 路径配置
  2. 然后点击configure,第一次会让你选择编译的平台,如果是64位的机器的话,需要将Optional platform for generator(if empty, generator uses:win32)设置成x64
  3. 完成后会进行编译,需要等一会。
  4. 编译完成后,找到OPENCV_EXTRA_MODULES_PATH,并选择刚刚复制到sources文件中的contrib
  5. 关键 找到BUILD_opncv_world并且勾选它,否则,直接编译点击Generate会生成很多独立的依赖库1
  6. 也会出现几个错误。

错误以及解决办法

1. 下载错误

下载ffmpeg等库出错,出现这些错误没办法编译成功的

CMake Warning at cmake/OpenCVDownload.camke:202(message):
   FFMPEG: Download failed: 6;"Couldn't resolve host name"
   ......

路径配置

解决办法

首先去检查build目录下的CMakeDownloadLog.txt文件,位置如图

CMakeDownload位置

打开后,找到如下图所示的地方,找到https://raw.githubusercontent.com/opencv/opencv_3rdparty/1df9bf0c0c6c2cf225bd3d8e4cf5985198352454/ffmpeg/opencv_videoio_ffmpeg.dll并复制到浏览器中下载,下载完成后,放到D:/download/opencv/sources/.cache/ffmpeg/,并将其更名成854b3460c435d04277e1f1ecc06cb809-opencv_videoio_ffmpeg.dll

1.下载后得到文件:opencv_videoio_ffmpeg.dll(假设已经在目录D:/download/opencv/sources/.cache/ffmpeg/中了)
2.此时该目录下会有几个3个大小位0字节的带md5验证码的文件(如`854b3460c435d04277e1f1ecc06cb809-opencv_videoio_ffmpeg.dll`)
3.这时将带验证码的文件名复制下来,然后删掉,最后将opencv_videoio_ffmpeg.dll更改成854b3460c435d04277e1f1ecc06cb809-opencv_videoio_ffmpeg.dll

问题解决

然后,依次完成其他文件的下载。这里需要提一下,有些文本文件是直接显示在网页上的。这时不能自己新建一个文件,如不能自己新建一个文本文件然后重名成ffmpeg_version.cmake。(因为编译会校验md5码,自己新建的话就会不一样)。正确的做法是:在显示的网页上右击选择另存为文件,然后在后续修改成ffmpeg_version.cmake文件。2

接着,按上面的方法,依次完成对D:/download/opencv/sources/.cache/文件夹下其他文件的修改

最后,完成后再次点击configure,不出意外会出现第二个错误

2. CONFIGURATION IS NOT SUPPORTED错误

错误如图:

configuration问题

解决办法

如图,取消如图位置的勾就能编译成功了(问题好像其实并没有解决)

configuration问题

这时在次点击configuration应该就能编译成功了,最后点击generate就可以编译成功了

VS2017编译

这时后再build文件下,会出现一个OpenCV.sln文件,打开文件进入VS2017界面,如见如图位置

configuration问题

如果如图位置是Debugx64的话,应该就没问题了,如果不是的话,重新装一遍吧。

最后在解决方案中找到CMakeTargets目录,并右击目录下的ALL_BUILD,然后选择生成。完成后,将Debug换成Release,再次生成。这时OpenCV编译完成

待续

1、将xxxxx...\opencv-4.4\build\x64\vc15\bin添加到系统环境变量path中

2、新建控制台项目,设置相关的项目链接库

3、打开项目属性页,首先将平台设置成x64,然后再VC++目录中的包含目录添加以下两个目录

xxxxx...\opencv-4.4\build\include
xxxxx...\opencv-4.4\build\include\opencv2

随后在库目录添加xxxxx...\opencv-4.4\build\x64\vc15\lib

4、最后,在链接器下的附加依赖项opencv_world440d.lib(Debug)或者opencv_world440.lib(Release)(这两个似乎不能同时配置?)

参考

Table of Contents