OpenCV学习笔记(2)_CMake+Visual Studio 2013 源码编译CPU版本的OpenCV

OpenCV学习笔记(2)CMake+Visual Studio 2013 源码编译CPU版本的OpenCV

文章目录

  • OpenCV学习笔记(2)CMake+Visual Studio 2013 源码编译CPU版本的OpenCV
    • 1. 系统配置及所用工具
    • 2. 过程概述及坑点
      • 2.1 下载安装各项工具
      • 2.2 下载OpenCV对应源码
      • 2.3 重点解决ffmpeg/ippicv下载失败问题
      • 2.4 编译勾选注意
      • 2.5 两次Configure一次Generate
      • 2.6 批生成
      • 2.7 install文件夹下找可用的安装版本
      • 2.8 源码可供调试
    • 3. 感悟,可以不看

1. 系统配置及所用工具

系统配置不高,原因很简单:小白一直比较穷. 但是通常来说,算法开发也并不需要很高的系统配置(就此安慰一下自己吧,等小白赚了钱再换好的电脑)

  • Windows10 64位操作系统
  • CPU:Intel Core i5-5200U CPU @2.20GHz 2.19GHz
  • 内存:8.00 GB

没有GPU,意味着编译出的并不是GPU版本的OpenCV,建议如果是有这方面需求的读者,可以去看一下CSDN博主“一朵小冯花”的博文系列“OpenCV编译合集”.

2. 过程概述及坑点

2.1 下载安装各项工具

Visual Studio 2013的下载安装就不多说了,毕竟这是一个现在看来已经非常古老的版本,VS2022都快要出来了. 也正因为如此,如果碰到了使用Visual Studio 2013这样的”稳定版本“进行开发工作时,OpenCV的官网已经不再提供支持如此老版本开发工具的直接安装版下载了,需要自己做编译.

CMake下载:官方下载地址

OpenCV学习笔记(2)_CMake+Visual Studio 2013 源码编译CPU版本的OpenCV_第1张图片

下载时,注意安装版和源码的差别,我们是Windows下使用的CMake,下载的是.msi文件.

安装CMake非常简单,各种勾选Next就可,唯一需要注意的是,需要在Install Options这一步时,勾选**“Add Cmake to the system PATH for all users”**,目的是把CMake添加进环境变量中.

安装成功后需要重启系统,打开cmd后输入cmake,可以查看到如下图的信息,即为配置成功.
OpenCV学习笔记(2)_CMake+Visual Studio 2013 源码编译CPU版本的OpenCV_第2张图片

2.2 下载OpenCV对应源码

OpenCV官网下载地址

找到相应版本,点击“Sources”下载的正是可编译的源码. 本小白这次下载的是3.4.16版本.

OpenCV学习笔记(2)_CMake+Visual Studio 2013 源码编译CPU版本的OpenCV_第3张图片

GitHub下载地址

在opencv的Github地址下,可以通过分支查看,在标签列表内查看目标版本.

OpenCV学习笔记(2)_CMake+Visual Studio 2013 源码编译CPU版本的OpenCV_第4张图片

注意查看Download ZIP,下载OpenCV对应的源码.

OpenCV学习笔记(2)_CMake+Visual Studio 2013 源码编译CPU版本的OpenCV_第5张图片

解压之后,可以把压缩文件解压到名为source的文件夹下.

打开CMake,配置编译器:

OpenCV学习笔记(2)_CMake+Visual Studio 2013 源码编译CPU版本的OpenCV_第6张图片

为了编译,把文件按以下方式组织:

OpenCV_3.4.16
	|
	|---- source
			|---- 解压文件
	|---- build

打开CMake的GUI,将以上的source路径和build路径作为源程序文件和编译位置.

OpenCV学习笔记(2)_CMake+Visual Studio 2013 源码编译CPU版本的OpenCV_第7张图片

2.3 重点解决ffmpeg/ippicv下载失败问题

以上设置之后直接点击“Configure”之后,可能会遇上很多的错误(红色). 其中有一种错误是非常常见的:

OpenCV学习笔记(2)_CMake+Visual Studio 2013 源码编译CPU版本的OpenCV_第8张图片

这个错误通常不会是一个,可能有四个,分别是以下四个文件出现错误:

  • opencv_ffmpeg.dll
  • opencv_ffmpeg_64.dll
  • ffmpeg_version.cmake
  • ippicv_20XX_win_intelXX_20XXXXXX_general.zip

出现问题的原因通常是因为网络,CMake无法下载这些文档.

解决方案其实蕴藏在CMake的错误提示里:

For details please refer to the download log file:
C:/Users/XXXXXX/Desktop/opencv-3.4.16/build/CMakeDownloadingLog.txt

于是我们可以找到这个CMakeDownloadingLog.txt:

在这里插入图片描述

以opencv_ffmpeg.dll为例,需要去红色框标记的网址处下载这个文件

https://raw.githubusercontent.com/opencv/opencv_3rdparty/0bf6c0753d435d2c82c03c48db0c6e18ac79976c/ffmpeg/opencv_ffmpeg.dll

然后要去source下的.cache/ffmpeg文件夹下,把opencv_ffmpeg.dll的文件名修改成带有MD5校验码的文件名.这个校验码在以上文本文件中也能看到,注意不是网址中的那一串码,而是do_copy那一句中的55c25bbc13e4a12d4339b70d3b76987f

在这里插入图片描述

其他三个文件也是一样处理,但这里需要注意,对于ffmpeg_version.cmake,不要复制打开网页后的文本,而应该直接右键另存为,防止格式出现错误.

把以上文件准备好之后如果Configure仍然报错,解决方法如下:

  • 保存的几个文件不要直接剪切到.cache文件夹下,因为可能会被CMake重新覆盖,应留有副本;
  • 把CMake的GUI关闭后,把build文件夹下的内容全部删除;
  • 把.cache文件夹的文件都准备好,然后打开CMakeGUI重新走一遍流程.

2.4 编译勾选注意

因为是编译CPU版本,没有GPU,也不打算编译跟python或java有关的内容,所以要注意,以下几个被默认选上的选项要去掉勾选:

  • BUILD_JAVA
  • BUILD_opencv_dnn
  • BUILD_opencv_java_bindings_generator
  • BUILD_js_bindings_generator
  • BUILD_opencv_objdetect
  • BUILD_opencv_python_bindings_generator
  • BUILD_opencv_python_tests

为了后面使用方便,需要勾选上以下选项

  • BUILD_opencv_world

2.5 两次Configure一次Generate

这一步正是如同很多博客里写的那样(此处也缅怀前不久殒命的浅墨大神),在CMake中两次点击Configure,一次点击Generate.

完成后,点击Open Project,打开OpenCV.sln,终于转到VS2013来编译.

2.6 批生成

打开OpenCV.sln解决方案文件,把项目INSTALL设置成启动项目,防止编译运行结束后报错.

OpenCV学习笔记(2)_CMake+Visual Studio 2013 源码编译CPU版本的OpenCV_第9张图片

”生成“–>”批生成“, 在INSTALL的Debug和Release后均勾选生成,然后点击生成按钮,开始编译.

OpenCV学习笔记(2)_CMake+Visual Studio 2013 源码编译CPU版本的OpenCV_第10张图片

2.7 install文件夹下找可用的安装版本

经过一段非常漫长的等待(如果没有其他bug的问题),就可以看到绝大多数的项目都编译通过了,但可能会有opencv_test_core的版本编译失败. 这个没关系,因为这个项目中有与GPU相关的代码,缺少相关依赖.

/build/install下的内容就是可以供安装的编译完版本,主要包括include下的头文件,和x64下的库文件. 使用这些内容和安装版的配置方式一样.

2.8 源码可供调试

如果想调试源码,可以看到在/build/bin/Debug或/build/bin/Release下有编译相关的.pdb文件,有了这个文件,我们就可以对源码进行调试.

3. 感悟,可以不看

这篇博客补的是一年前的坑,一年前的那篇博客,也是本系列的第一篇里写过,“要尝试编译源码的方式来安装OpenCV”. 结果后面一整年都没有写OpenCV相关的内容.

本小白在经历了这个反复踩坑编译OpenCV的过程之后,其实也非常建议众多跟本小白一样的小白们,尝试一下通过CMake的方式编译OpenCV. 你可以借此机会一窥CMake、VS等相关的基础知识,能够学习如何编译一个第三方开源代码项目. 毕竟在GitHub这样的开源社区里,有大量的源码,别人分享出来的方式,往往就是带了一个CMakeList.txt.

对有志于学习编程的人来说,调试、阅读别人的源码是非常重要的学习方法,也是一项基本技能. 本小白就是长期逃避这样一个学习过程,从而对各种知识浅尝辄止,不能深入到基础的内容, 以致于职业生涯遇到了极大的瓶颈. 这才痛定思痛,从去年开始把自己归零,回头学习各种基础,发现到处都是技能盲点. 希望后来者不要再走本小白走过的弯路.

这里也再挖上一个坑,后续本小白会着力系统性地学习CMake的相关使用, 也会再出一个系列,名字暂定为“CMake使用学习——从小白到入门”.

2021年年初给自己立的flag,是要写四十篇技术博客的,但是年终回望,只有区区二十几篇,中间还有几篇是临时的记录性的笔记. 笔记的内容也多是集中在工具的推荐和使用上. 虽然自己觉得工具这块也很重要,毕竟程序员是一个工程性的岗位,需要各种辅助工具提高工作的效率和效能,但是这些东西仍然浮于表面,可以推荐,但不应该占据了大头. 2022年,本小白希望自己能够做到坚持创作,并且慢慢把重心沉淀到一些具有实际内涵,能够夯实基础的技术内容.

小白写博客的初心,就是为了从一个小白的身份出发,记录自己的学习历程、分享自己学习过程中的所得所感,能够做一个踏坑者. 道路依然艰辛遥远,水平仍然徘徊不前,但脚踩在学习的羊肠小道上,却仍然能够驱散哪怕一米方圆的谜雾,看到不远处的微光,为后来人点亮道旁的明灯.
OpenCV学习笔记(2)_CMake+Visual Studio 2013 源码编译CPU版本的OpenCV_第11张图片

你可能感兴趣的:(OpenCV+Qt,学习数字图像处理,opencv,计算机视觉,c++,cmake)