Win10+Vs+CMake安装OpenCV+contrib

文章目录

      • 0.前言
      • 1.准备工作
        • 1.1.下载Vs
        • 1.2.下载CMake
        • 1.3.下载OpenCV和opencv-contrib
      • 2.CMake编译Opencv和contrib源码(重点)
        • 2.1.初次config
        • 2.2.再次config
        • 2.3.解决文件下载失败报错
        • 2.4.解决找不到python2的可执行文件报错
        • 2.5.生成工程
      • 3.使用Vs打开工程编译
        • 3.1.报错1:没有那个文件或目录
        • 3.2.报错2:编译时头文件不对
        • 3.3.报错3:LNK1104 无法打开文件“python37_d.lib”
        • 3.4.编译工程
        • 3.5.新建工程测试
      • 4.遗留问题
      • 5.资源分享(仅针对opencv4.5.1版本)

0.前言

​ 由于需要使用Opencv中的Aruco码进行位姿估计,而Aruco的功能在opencv-contrib模块中。而直接在官网下载的编译好的Opencv(即含有build文件夹)不包含contrib模块,因此如果想使用contrib模块,必须使用源码再次进行编译安装。此外,如果之前已经安装了opencv,想追加安装contrib模块,也是这种操作,因为cintrib必须和opencv一起编译,并不能单独编译使用。

​ 我在经历了多次失败后成功从源码编译安装了Opencv+contrib,在此做一个记录。主要的参考是B站两个Up主的视频( 参考视频1 参考视频2 ),在此表示感谢。

1.准备工作

1.1.下载Vs

​ 参考

​ 此处我使用的是vs2017,下载时的选项如下(图片使用的是网图,其中安装的是vs2019):

image-20210225204929530

Win10+Vs+CMake安装OpenCV+contrib_第1张图片

Win10+Vs+CMake安装OpenCV+contrib_第2张图片

Win10+Vs+CMake安装OpenCV+contrib_第3张图片

Win10+Vs+CMake安装OpenCV+contrib_第4张图片

Win10+Vs+CMake安装OpenCV+contrib_第5张图片

Win10+Vs+CMake安装OpenCV+contrib_第6张图片

Win10+Vs+CMake安装OpenCV+contrib_第7张图片

1.2.下载CMake

​ 参考

1.3.下载OpenCV和opencv-contrib

  1. opencv下载

    下载地址:https://opencv.org/releases/

    Win10+Vs+CMake安装OpenCV+contrib_第8张图片

    这里到官网下载exe文件和Source文件均可,exe文件双击后会解压文件到某个位置,解压后的文件内容如下:

    Win10+Vs+CMake安装OpenCV+contrib_第9张图片

  2. opencv_contrib下载

    下载地址:https://github.com/opencv/opencv_contrib/releases

  3. 解压opencv_contrib压缩包到opencv目录下

    Win10+Vs+CMake安装OpenCV+contrib_第10张图片

务必注意:Opencv的版本和contrib的版本必须要一致!

2.CMake编译Opencv和contrib源码(重点)

参考视频1 参考视频2 参考博客1

2.1.初次config

  • 在opencv的目录下新建一个文件夹,用于存放一会用cmake编译生成的vs工程
    Win10+Vs+CMake安装OpenCV+contrib_第11张图片

  • 打开cmake,选择源码路径和编译的工程存放路径

Win10+Vs+CMake安装OpenCV+contrib_第12张图片

  • 点击config,配置编译工具

Win10+Vs+CMake安装OpenCV+contrib_第13张图片

  • 开始编译,等待。这里一般会出现网络问题,即文件下载不成功:

Win10+Vs+CMake安装OpenCV+contrib_第14张图片

2.2.再次config

  • 先不管上面的报错信息,继续进行下一步:

    Win10+Vs+CMake安装OpenCV+contrib_第15张图片

  • 等待config完成,同样会报错。config一次可能上面的选项中还是会有红色,如下图所示。此时再次点击config,直到红色消失:

    Win10+Vs+CMake安装OpenCV+contrib_第16张图片

Win10+Vs+CMake安装OpenCV+contrib_第17张图片

2.3.解决文件下载失败报错

  • 打开OpenCV4.5.1/new_build/CMakeDownloadLog.txt文件,查看报错信息

Win10+Vs+CMake安装OpenCV+contrib_第18张图片

进入到CMakeDownloadLog.txt文件中所指示的文件存储位置可以发现,很多文件都的大小都是0Kb,可见文件并没有完整下载下来,因此报了上面的错误。在这里我们先解决4个文件下载失败的问题,分别是

  1. IPPICV 文件:

Win10+Vs+CMake安装OpenCV+contrib_第19张图片

  1. FFMPEG 文件

Win10+Vs+CMake安装OpenCV+contrib_第20张图片

  1. FFMPEG 文件

Win10+Vs+CMake安装OpenCV+contrib_第21张图片

以上三个文件都是可以下载的,根据CMakeDownloadLog.txt文件中的网址,用浏览器输入网址把这三个文件下载下来,然后复制到指定的位置,再将文件名改为“md5校验码-文件名”的形式即可。

Win10+Vs+CMake安装OpenCV+contrib_第22张图片

  1. ffmpeg_version.cmake文件:(这里我在cmake中下载成功了,之前没有下载成功,)

如果这个文件在Cmake中也没有下载成功的话,输入网址进去会发现它不能下载,而是直接显示文件的内容。直接把网页中显示的文件内容复制,然后到文件的存储位置用记事本打开文件,粘贴进去即可。

  • 剩下的 .i 文件

    看cmake的报错可以发现,还剩下xfeatures2d/boostdesc文件夹下的文件下载失败,如图所示:

Win10+Vs+CMake安装OpenCV+contrib_第23张图片

还有xfeatures2d/vgg文件夹下的文件下载失败,如图所示:

Win10+Vs+CMake安装OpenCV+contrib_第24张图片

同样,这些文件和ffmpeg_version.cmake文件一样,输入网址进去也不能下载,网页会显示文件内容,如图所示。此时直接将网页内容复制然后粘贴到文件中去,或者右键另存为txt下载即可。

Win10+Vs+CMake安装OpenCV+contrib_第25张图片

但是经过我的测试,把这些.i文件按照上面那4个文件的做法,复制到指定位置并且重命名后,再进入到Cmake中编译,还是会下载文件,并且这些重命名后的文件全部又变成了0Kb。原因不明,所以这里先不更改复制这些文件到指定位置

正确的操作是:输入这些文件的网址,然后右键另存为,这些文件在后面会使用到,文件名会自动生成,不必更改。Win10+Vs+CMake安装OpenCV+contrib_第26张图片

Win10+Vs+CMake安装OpenCV+contrib_第27张图片

如下图,是我得到的所有.i文件:

Win10+Vs+CMake安装OpenCV+contrib_第28张图片

2.4.解决找不到python2的可执行文件报错

CMake Warning at cmake/OpenCVDetectPython.cmake:81 (message):
  CMake's 'find_host_package(PythonInterp 2.7)' found wrong Python version:
  PYTHON_EXECUTABLE=C:/Users/xx/AppData/Local/Programs/Python/Python38/python.exe
  PYTHON_VERSION_STRING=3.8.2
  Consider providing the 'PYTHON2_EXECUTABLE' variable via CMake command line
  or environment variables
  ........

报错的内容如上,大致的意思就是cmakelists中用到了python2.7,而这个python2.7是使用一个叫PYTHON_EXECUTABLE的环境变量指向的,但是因为没定义这个环境变量,它直接指向了默认的python版本,也就是python3的版本。所以解决的办法就是把添加这个环境变量,并将其内容更改为python2.7的可执行文件。如图所示。具体操作见: 参考

img

2.5.生成工程

经过以上步骤之后,除了.i文件的下载问题未解决之外,其他的问题已经都解决了。这时候再次点击config,应该会发现输出的报错中只剩.i文件下载失败的错误了。这里不管他,直接点击generate生成工程。

Win10+Vs+CMake安装OpenCV+contrib_第29张图片

3.使用Vs打开工程编译

参考

注意:倘若直接编译的话,会产生如下3.1、3.2和3.3的错误。因为编译的时间非常长,所以这里就未雨绸缪,先根据原因消除错误再进行编译。

3.1.报错1:没有那个文件或目录

问题:编译OpenCV提示opencv_contrib缺少boostdesc_bgm.i等文件。

解决:添加.i文件到指定目录。将在上一节中下载的.i文件,全部复制到E:\OpenCV4.5.1\opencv_contrib-4.5.1\modules\xfeatures2d\src路径下即可。如图所示:

Win10+Vs+CMake安装OpenCV+contrib_第30张图片

如果不进行这一步的操作的话,最后编译工程会产生如下错误,可以看到其中就有提示找不到.i文件。

image-20210226004825625

3.2.报错2:编译时头文件不对

问题

fatal error: features2d/test/test_detectors_regression.impl.hpp: 没有那个文件或目录
#include "features2d/test/test_detectors_regression.impl.hpp

解决:头文件include地址不对,解决方法如下:

  • sources/modules/features2d/test/文件下的以下5个文件:

    注意:该目录下有6个.hpp文件,只拷贝下面五个就可以,不需要拷贝test_precomp.hpp文件)

test_descriptors_invariance.impl.hpp
test_descriptors_regression.impl.hpp
test_detectors_invariance.impl.hpp
test_detectors_regression.impl.hpp
test_invariance_utils.hpp

​ 拷贝到opencv_contrib-4.1.0/modules/xfeatures2d/test/文件下。

  • 同时,将opencv_contrib-4.1.0/modules/xfeatures2d/test/test_features2d.cpp文件里的

    #include "features2d/test/test_detectors_regression.impl.hpp" 
    #include "features2d/test/test_descriptors_regression.impl.hpp"
    

    改成:

    #include "test_detectors_regression.impl.hpp" 
    #include "test_descriptors_regression.impl.hpp"
    

    opencv_contrib-4.1.0/modules/xfeatures2d/test/test_rotation_and_scale_invariance.cpp文件里的

    #include "features2d/test/test_detectors_invariance.impl.hpp" 
    #include "features2d/test/test_descriptors_invariance.impl.hpp"
    

    改成:

    #include "test_detectors_invariance.impl.hpp"
    #include "test_descriptors_invariance.impl.hpp"
    

3.3.报错3:LNK1104 无法打开文件“python37_d.lib”

参考

问题:编译OpenCV提示LNK1104 无法打开文件“python37_d.lib”,其实原因就是缺少了python的debug版本库文件,因为一般在安装python的时候都是没安装debug模式。

解决:在解决这个问题之前,请先确保你安装了python的debug版本,如果没有,可以修改已经安装的python,如下图所示勾选最后一项,然后install

Win10+Vs+CMake安装OpenCV+contrib_第31张图片

然后,解决方法很简单,给如下图所示的项目添加python37_d.lib所在的路径即可。

Win10+Vs+CMake安装OpenCV+contrib_第32张图片

Win10+Vs+CMake安装OpenCV+contrib_第33张图片

以下这两个操作必不可少!

1、将python37_d.lib所在文件夹的路径添加到库目录里面

Win10+Vs+CMake安装OpenCV+contrib_第34张图片

2、然后在附加依赖项中添加python37_d.lib,就是刚才找不到的这个库文件的名字。然后保存即可

Win10+Vs+CMake安装OpenCV+contrib_第35张图片

3.4.编译工程

  • 进入cmake的编译目录,即一开始新建的new_build目录,点击Opencv.sln用vs打开。

Win10+Vs+CMake安装OpenCV+contrib_第36张图片

  • 批生成解决方案

    Win10+Vs+CMake安装OpenCV+contrib_第37张图片

  • 勾选ALL_BUILD和INSTALL生成解决方案

Win10+Vs+CMake安装OpenCV+contrib_第38张图片

  • 经过漫长的编译,终于成功了!

    Win10+Vs+CMake安装OpenCV+contrib_第39张图片

3.5.新建工程测试

  • 添加环境变量

    Win10+Vs+CMake安装OpenCV+contrib_第40张图片

  • 新建空项目,并添加测试源文件

    此时添加源文件后,会发现报错找不到头文件等等,这是因为还没有配置项目属性。

  • 配置项目属性

    显示属性管理器

    Win10+Vs+CMake安装OpenCV+contrib_第41张图片

    为Debug模式新建属性表

    Win10+Vs+CMake安装OpenCV+contrib_第42张图片

    编辑属性表

    Win10+Vs+CMake安装OpenCV+contrib_第43张图片

  • 添加include路径、library路径

    Win10+Vs+CMake安装OpenCV+contrib_第44张图片

    Win10+Vs+CMake安装OpenCV+contrib_第45张图片

  • 添加链接器链接的lib路径

    找到上一步添加的库目录的路径,即E:\OpenCV4.5.1\new_build\install\x64\vc15\lib,由于我们之前生成了debug和release两种类型的库,所以可以发现该路径下的库分为release用的*.lib库和debug用的 *d.lib库。由于我们现在配置的是debug模式下的属性表,所以需要提取所有的 *d.lib文件。

    在该目录下新建一个getDebugLibName.txt文件,内容改为

    DIR *d.lib /B >debugLibName.txt
    

    意思就是提取当前目录下的所有文件名以d.lib结尾的文件,然后将文件名输出到debugLibName.txt文件中。Win10+Vs+CMake安装OpenCV+contrib_第46张图片

    保存后将getDebugLibName.txt文件重命名为getDebugLibName.bat文件,即编程windows下的批处理文件。然后双击这个文件运行,就会得到一个debugLibName.txt文件。

    Win10+Vs+CMake安装OpenCV+contrib_第47张图片

    复制该文件里的所有内容,添加到链接器的input里面,然后保存属性表即可。

    Win10+Vs+CMake安装OpenCV+contrib_第48张图片

  • 运行项目,发现报错找不到d.dll文件

    Win10+Vs+CMake安装OpenCV+contrib_第49张图片

    这里是因为我们之前添加的Opencv的系统环境变量还没生效,需要重启电脑让环境变量生效。此时重启即可。

  • 再次运行测试项目

    注意把测试下项目改成Debug下的x64模式,然后点击运行。

    Win10+Vs+CMake安装OpenCV+contrib_第50张图片

    Win10+Vs+CMake安装OpenCV+contrib_第51张图片

项目成功运行,把生成的Aruco码显示了出来,说明Opencv和contrib模块都是正常的。 大功告成

4.遗留问题

在上面添加链接器的库文件的时候,有很多库文件,我是使用了一个批处理文件得到了这些文件的名称,然后复制到了属性表中,这样操作比较麻烦。

使用cmake进行编译的时候,有一个BUILD_opencv_world选项,如下图所示。

Win10+Vs+CMake安装OpenCV+contrib_第52张图片

如果选择了这个选项,那么最后使用vs编译生成.lib库文件的时候就会生成一个总的opencv_world451d.lib文件,如下图所示。

Win10+Vs+CMake安装OpenCV+contrib_第53张图片

但是,我之前勾选了这个选项,在使用vs编译的时候,会产生很多错误,提示找不到opencv_world451d.lib文件。而不勾选这个选项就不会报错,所以上面的做法中我没有勾选。由于最后这两种情况的使用效果是一样的,并且编译一次太耗时间,因此我就没再测试。

5.资源分享(仅针对opencv4.5.1版本)

  • cmake下载失败的文件

链接:https://pan.baidu.com/s/1ImP_ut0T45eiaaayNbkwpQ 提取码:mn5m

  • 编译好的install文件夹,仅使用这个文件夹下的文件就可以进行opencv的开发了。

链接: https://pan.baidu.com/s/1aQvsrYty6vjCYPd-HrxLUQ 提取码:o13u

  • 整个opencv4.5.1和contrib文件夹,也就是我上面的教程中生成的所有文件

链接:https://pan.baidu.com/s/1bL5d25TH-SxENieST6MEFg 提取码:h0s6

Win10+Vs+CMake安装OpenCV+contrib_第54张图片

你可能感兴趣的:(杂项,opencv,cmake,visual,studio)