在Windows平台编译OpenCV及开发环境配置

在Windows平台编译OpenCV及开发环境配置

第一步_软件下载

工欲善其事,“必先有其器”。

  • 以下是需要用到的软件和工具清单
表一
软件用途下载地址版本
VS(Visual Studio)开发和编译(打工人)https://visualstudio.microsoft.com/zh-hans/downloads/社区版就够用,版本选择详见表二
CMake高效编译和组织代码(中介)https://cmake.org/download/版本选择较新的,详见图一
OpenCV开发机器视觉相关应用(工具)https://opencv.org/releases/版本最好选择不要太旧也不要太新的,详见表二
Dependencies查看dll的依赖https://github.com/lucasg/Dependencies最新

1.VS相关注意事项

  • 在官网上选择CMake支持的版本(15、17、19、22)
  • 选择"使用C++的桌面开发"一项就够用了
  • 此软件所需空间较大,注意留足相应空间

2.CMake相关注意事项

  • win64位的平台推荐msi安装包
    • 其他平台按需选择
  • 生成VS解决方案过程中,会下载一些依赖,下载可能会比较慢
图一
图一

3.OpenCV相关注意事项

  • 如果需要拓展库,opencv主库和拓展库的版本要一致
  • 如果用较新版本的VS编译较旧版本的OpenCV,可能会出现些让人摸不着头脑的错误,网络也很少有解决方法
    • 目前用过编译没问题的对应版本如表二
表二
VS版本OpenCV版本
VS2019OpenCV4.5.4
VS2022OpenCV4.8.0
  • 最好用4.0以上版本,因为这之后与之前的版本有较大更新
  • 源码下载后,解压,放在一个目录深度为1或者2的地方最好(参考链接3)
    • 可能涉及到VS能够到达的目录深度(即绝对路径深度)
    • 如果目录放得太深,编译时可能会报无法打开某些文件的错误
  • 安装包的话,直接安装即可(只有win64位的)
图二
图二

第二步_编译OpenCV

不积硅步,无以至千里。

  • 如果想安装的是windows平台64位的OpenCV库,那就无需编译,官方已经贴心的准备好预编译好的库,在官网下载后安装好就可以用了

  • 有在windows平台安装32位OpenCV库的需求的话,可继续看完这一步。

  • 一般以下几种情况需要编译

    • 开发的是32位的软件,只能调用32位的库(在windows平台也就是dll文件)
    • 系统是32位的
    • 需要加入拓展包
  • 编译

    • OpenCV需要编译的原因是因为它是一个开源的计算机视觉库,它提供了大量的图像处理和计算机视觉算法函数。编译过程将源代码转换为可执行的机器代码,以便在特定平台上运行。
    • 在编译过程中,编译器会将源代码转换为目标代码(.o文件),然后链接器将目标代码和其他依赖项(如库文件)合并为可执行文件或动态链接库(.dll、.so文件),以供应用程序调用和使用。
    • 为什么不直接提供预编译的库文件呢?仅提供了使用者较多的win64的编译好的库文件。这是因为不同的操作系统、硬件平台和编译选项可能会导致库文件不兼容或性能下降。通过提供源代码并让用户自行编译,可以确保根据特定的环境和需求进行优化和配置。
    • 编译OpenCV是为了适应不同的平台和需求,以及提供更好的性能和灵活性。

1.CMake启动!

  • 有快捷方式就直接双击启动,找不到入口的可以去安装的目录下找到cmake-gui.exe启动
  • 启动后,选择完源码目录和生成编译文件所在目录后,点击Configure配置平台参数,详见图三
    • 生成编译文件所在目录:一般选择在源码目录下新建个win32build目录,使用该文件夹来存放编译后文件
图三
图三
  • 配置Configure
    • 配置前先装好VS,要不然会报错
    • 选择的VS版本与已安装的VS版本不对应也会报错
    • 如果配置出错,点击左上角File,清空缓存后重新再配置
    • 配置有效的话,会自动下载所需依赖并生成编译选项
图四
图四
  • 首次出现的配置项会显示为红色
  • 编译选项生成后,可根据需要选择
  • 打勾BUILD_opencv_world选项,可以将函数集成一个库文件里
  • 选择完成后,点击Generate,生成VS解决方案
图五
图五
  • 生成完成,点击Open Project打开VS解决方案,打开后按以下步骤,如图六
    1. 右键点击解决方案
    2. 在弹出的菜单中选择批生成
    3. 勾选INSTALL项目中Debug和Release两项配置
    4. 点击生成
  • 之后就是略微漫长的编译过程
图六
图六
  • 图七为编译成功的输出截图,共计耗时42分钟
图七
图七

2.编译过程中报错

  • 目前遇到到过的错误
    1. 无法打开某个lib
    2. 找不到某个文件
    3. CMake下载依赖失败
解决方法
  • 遇到的问题,不一定完全一致,如果出现的问题如上述三点,或比较相似,以下是提供的建议
  1. 减少安装路径深度,把路径改短点(参考链接3)
  2. 按表二提供版本安装相应的VS和OpenCV版本
  3. 下载失败后,文件夹中会出现文件:download_with_curl.sh,用文本编辑器或者直接双击打开,在所有链接前面添加https://ghproxy.com/,复制命令到终端执行,文件里每个下载失败的文件都要执行一次,如图八
    1. 例如:curl --create-dirs --output "D:/Apps/opencv-4.8.0/.cache/ffmpeg/8862c87496e2e8c375965e1277dee1c7-ffmpeg_version.cmake" "https://ghproxy.com/https://raw.githubusercontent.com/opencv/opencv_3rdparty/7da61f0695eabf8972a2c302bf1632a3d99fb0d5/ffmpeg/ffmpeg_version.cmake"
    2. 添加后,复制命令到CMD中执行
    3. 再次点击Configure,就能成功了
图八
图八

配置开发环境

1.创建与配置项目

  • 创建项目
图九
图九
  • 打开属性管理器
图十
图十
  • 在属性管理器里双击相应的平台,打开配置
图十一
图十一
  • 在VC++目录里分别添加以下路径

    1. 包含目录:添加OpenCV,include目录
    2. 库目录:添加OpenCV静态库所在的路径
  • 在链接器中输入配置中,添加相应OpenCV版本的附加依赖项,例如以下静态库

    • opencv_world480d.lib
图十二
图十二
  • 把运行配置改成对应的平台,如图十三
图十三
图十三

2.编写一个demo.cpp

  • 如果执行过程中,报错找不到某个dll,例如opencv_world480d.dll,就把该dll复制到源码所在目录下,demo.cpp代码如图十四
    • 或把该dll所在目录添加到系统环境变量里
    • 程序寻找依赖一般是优先在同级目录下寻找
  • 可在OpenCV源码目录下doc文件夹里面随意找一个图片来验证demo
图十四
图十四
  • 若执行成功,出现图片,表示在VS开发OpenCV的环境已经搭建完成

参考链接

  1. Win10,vs2019配置Opencv基础包和扩展包,Cmake下载文件失败以及编译无报错但是代码运行时提示无法定位程序输入点的解决方法。 [1]
  2. GitHub Proxy [2]
  3. ["LINK110:无法打开文件opencv_world342d.lib" OpenCV](https://blog.csdn.net/qq_42661075/article/details/86547054 ""LINK110:无法打开文件opencv_world342d.lib" OpenCV")
  4. 在 Linux 系统中编译安装 OpenCV [3]
  5. 公众号:小白学视觉

参考资料

[1]

Win10,vs2019配置Opencv基础包和扩展包,Cmake下载文件失败以及编译无报错但是代码运行时提示无法定位程序输入点的解决方法。: https://zhuanlan.zhihu.com/p/647129439

[2]

GitHub Proxy: https://ghproxy.com/

[3]

在 Linux 系统中编译安装 OpenCV: https://zhuanlan.zhihu.com/p/392751819

本文由 mdnice 多平台发布

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值