文章目录

  • 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):

1.2.下载CMake

​ 参考

1.3.下载OpenCV和opencv-contrib

  1. opencv下载

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

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

  2. opencv_contrib下载

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

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

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

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

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

2.1.初次config

  • 在opencv的目录下新建一个文件夹,用于存放一会用cmake编译生成的vs工程

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

  • 点击config,配置编译工具

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

2.2.再次config

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

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

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

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

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

  1. IPPICV 文件:

  1. FFMPEG 文件

  1. FFMPEG 文件

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

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

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

  • 剩下的 .i 文件

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

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

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

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

正确的操作是:输入这些文件的网址,然后右键另存为,这些文件在后面会使用到,文件名会自动生成,不必更改。

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

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.exePYTHON_VERSION_STRING=3.8.2Consider providing the 'PYTHON2_EXECUTABLE' variable via CMake command lineor environment variables........

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

2.5.生成工程

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

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路径下即可。如图所示:

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

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

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

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

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

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

3.4.编译工程

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

  • 批生成解决方案

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

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

3.5.新建工程测试

  • 添加环境变量

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

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

  • 配置项目属性

    显示属性管理器

    为Debug模式新建属性表

    编辑属性表

  • 添加include路径、library路径

  • 添加链接器链接的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文件中。

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

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

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

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

  • 再次运行测试项目

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

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

4.遗留问题

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

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

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

但是,我之前勾选了这个选项,在使用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相关推荐

  1. python卸载+安装opencv+contrib库

    一.卸载 1.在Anaconda3目录中找到site-packages文件夹 我的路径是: 2.查看已安装的opencv版本 我现在的版本是4.5.4.60,之前是4.5.5.64,下述图片及过程是卸 ...

  2. 树莓派安装Opencv+Contrib和 QT 详细教程

    文章目录 前言 一.卸载OpenCV或重装系统 1.卸载OpenCV 2.重装系统 ①. 下载raspbian ②. 安装raspbian ③. 配置树莓派WiFi和SSH ④. 树莓派VNC设置 ⑤ ...

  3. win10 使用vcpkg 安装 opencv 教程

    本人的开发环境如下:window10+64位操作系统+Microsoft Visual Studio 2017.本次C++安装OpenCV主要通过包管理器 vcpkg 实现(类似Python中的Pip ...

  4. win10下pycharm安装opencv tensorflow anaconda

    https://www.cnblogs.com/csu-lmw/p/9356719.html

  5. Ubuntu 20.04 下安装 OpenCV 3.4.11 并测试使用

    目录 0 操作环境 1 什么是 Opencv 2 安装 Opencv 2.1 下载 Opencv 2.2 Opencv 的配置环境 3 Opencv 对图片进行处理 3.1 代码文件创建 3.2 编译 ...

  6. OpenCV contrib 等的配置与vscode自动补全功能

    系统:Ubuntu18.04 版本:OpenCV+contrib 4.5.1 已经配置好的:https://pan.baidu.com/s/1Dl3ePy6dG5AQca37I7FFeg zlaf 安 ...

  7. 在Ubuntu18.04上安装opencv 3.4.1

    对于安装opencv有的人一次就成功,而有人安装了N多次才成功.我就是那个安装了N多次的人,每次遇到了很多安装错误,只能通过到网上搜教程资料,解决方法:通过一次次的试错,最终完成了安装.再此提醒第一次 ...

  8. 在ubuntu20.04环境下安装opencv教程并测试

    目录 一.安装opencv 二 配置环境 三 实例 四 总结 五参考文献 一.安装opencv 1下载 在虚拟机内打开浏览器输入网址Release OpenCV 3.4.15 · opencv/ope ...

  9. opencv opencv contrib

    opencv contrib https://github.com/opencv/opencv_contrib/releases/tag/4.5.5 opencv https://github.com ...

最新文章

  1. 常用地理数据平台及环境数据资源 (GIS)
  2. 10 个适合网店使用的免费 Bootstrap 模板
  3. Android APK 签名文件MANIFEST.MF、CERT.SF、CERT.RSA分析
  4. 《徐徐道来话Java》:PriorityQueue和最小堆
  5. 两相电机倒顺开关的接法是什么?
  6. 支持IE,Firefox的日历控件
  7. Uber柳甄:Uber中国独立核算 谋求国内A股上市
  8. Linux中KVM虚拟机是什么
  9. 我理解的17种C#写的Hello World程序
  10. 中富之命能有多少钱_算命中富 算命的说我是中富命,谁可以帮忙解释下
  11. hxxp://www.hao923.com.cn/劫持浏览器
  12. 冷库设计安装前有哪些检查工作
  13. Oracle 19c遇到ORA-XXXX:????的问题的解决方案
  14. python 画图自定义x轴刻度值
  15. Word及Autocad中中文字号与字体大小的关系
  16. (十二)幸福之家 - 1
  17. yolov5s-5.0网络模型结构图
  18. 在Unity中模仿游戏《江南百景图》中物体的出现效果
  19. 模拟开关和数字开关的区别
  20. html 输入框键盘遮挡,解决输入框被键盘挡住的问题

热门文章

  1. android 右侧点击翻页,巧用ViewPager实现驾考宝典做题翻页效果
  2. 使用FFmpeg进行mp4与m3u8之间转换
  3. CrossBar 将 PUF 技术引入 ReRAM
  4. Android远程弹窗,Remote Desktop(远程桌面)Android平台远程电脑的又一神器!
  5. JavaScript 详细笔记(狂神说学习笔记)
  6. html5 视差地图,用HTML5构建高性能视差网站的图文代码详解
  7. wifi的几种加密方式
  8. 分布式技术(5)服务高可用:幂等性设计
  9. 用Python画等边三角形
  10. 当爱情遇见钱:找有钱的男人能得到啥