zl程序教程

您现在的位置是:首页 >  后端

当前栏目

利用CMake生成OpenCV-3.0.0的VS2013工程(解决方案),并在VS2013下进行编译的详细过程记录(从失败到成功的曲折过程)

Opencv解决方案 利用 详细 进行 生成 过程 记录
2023-09-11 14:15:39 时间

之前博主尝试着CMake编译OpenCV-4.1.2源码,使其可以在VS2012下进行图像处理开发,最终因为缺少库OpenBLAS而失败。详情见博文:https://blog.csdn.net/wenhao_ir/article/details/124641125

今天准备再尝试下“CMake编译OpenCV-3.0.0源码,使其可以在VS2013下进行图像处理开发”。

由于博文https://blog.csdn.net/wenhao_ir/article/details/124641125对过程已经记录得挺详细的了,所以这篇博文就只作简要记录。

OpenCV-3.0.0源码下载地址:
链接:https://pan.baidu.com/s/16uPy69GiOrlGEataEvrd9A?pwd=dj75
博主注:大家先不要急着下载这个源码,原因后面有说明。

OpenCV-3.0.0扩展库下载地址:
链接:https://pan.baidu.com/s/1RA_sCdp4VekqzE7CNON-zg?pwd=lh3g

准备工作做好,如下图所示:
在这里插入图片描述
打开Cmake,选择好源代码目录和build存放目录:
在这里插入图片描述
然后点击左下角“configure”按钮,选择好平台和目标平台类型。
在这里插入图片描述
点击Finish开始configure

configure的整个过程花费时间不少,时间主要是耗费在了下载文件 ippicv_windows_20141027.zip上,如下图所示:
在这里插入图片描述
最终还是没有下载成功,见下面的报错说明。其实博文中https://blog.csdn.net/wenhao_ir/article/details/124664637首先遇到的也就是这个问题。

第一次报错如下:
在这里插入图片描述
有两处报错:

一个一个错误来分析(日志中的红色部分,不一定是错误)
第一处:

CMake Deprecation Warning at CMakeLists.txt:22 (cmake_minimum_required):
  Compatibility with CMake < 2.8.12 will be removed from a future version of
  CMake.

  Update the VERSION argument <min> value or use a ...<max> suffix to tell
  CMake that the project does not need compatibility with older versions.


CMake Deprecation Warning at CMakeLists.txt:69 (cmake_policy):
  The OLD behavior for policy CMP0022 will be removed from a future version
  of CMake.

  The cmake-policies(7) manual explains that the OLD behaviors of all
  policies are deprecated and that a policy should be set to OLD only under
  specific short-term circumstances.  Projects should be ported to the NEW
  behavior and not rely on setting a policy to OLD.


CMake Deprecation Warning at CMakeLists.txt:74 (cmake_policy):
  The OLD behavior for policy CMP0026 will be removed from a future version
  of CMake.

  The cmake-policies(7) manual explains that the OLD behaviors of all
  policies are deprecated and that a policy should be set to OLD only under
  specific short-term circumstances.  Projects should be ported to the NEW
  behavior and not rely on setting a policy to OLD.


CMake Deprecation Warning at CMakeLists.txt:79 (cmake_policy):
  The OLD behavior for policy CMP0042 will be removed from a future version
  of CMake.

  The cmake-policies(7) manual explains that the OLD behaviors of all
  policies are deprecated and that a policy should be set to OLD only under
  specific short-term circumstances.  Projects should be ported to the NEW
  behavior and not rely on setting a policy to OLD.

出现以上提示的原因在于OpenCV-3.0.0的源码的Cmake文件是在老版本的Cmake基础上写的,其所用的一些功能会在将来的Cmake版本中去除,所以建议按目前所使用的Cmake版本来重写Cmake。好在上面所有提示的功能在目前的的版本中都还没有被去除,所以我们暂时不用理会这些。

第二处:

ICV: Downloading ippicv_windows_20141027.zip...
CMake Error at 3rdparty/ippicv/downloader.cmake:71 (file):
  file DOWNLOAD HASH mismatch

    for file: [F:/Build-openCV3.0.0/opencv-3.0.0/3rdparty/ippicv/downloads/windows-b59f865d1ba16e8c84124e19d78eec57/ippicv_windows_20141027.zip]
      expected hash: [b59f865d1ba16e8c84124e19d78eec57]
        actual hash: [827569eea3481e6da39d28713cc4309d]
             status: [28;"Timeout was reached"]

Call Stack (most recent call first):
  3rdparty/ippicv/downloader.cmake:108 (_icv_downloader)
  cmake/OpenCVFindIPP.cmake:235 (include)
  cmake/OpenCVFindLibsPerf.cmake:12 (include)
  CMakeLists.txt:526 (include)


CMake Error at 3rdparty/ippicv/downloader.cmake:75 (message):
  ICV: Failed to download ICV package: ippicv_windows_20141027.zip.
  Status=28;"Timeout was reached"
Call Stack (most recent call first):
  3rdparty/ippicv/downloader.cmake:108 (_icv_downloader)
  cmake/OpenCVFindIPP.cmake:235 (include)
  cmake/OpenCVFindLibsPerf.cmake:12 (include)
  CMakeLists.txt:526 (include)

上面的报错是说文件 ippicv_windows_20141027.zip下载失败,看来还是得像博文 https://blog.csdn.net/wenhao_ir/article/details/124664637中那样去网上寻找这几个文件。

经过一番寻找,最终找到了,我把 ippicv_windows_20141027.zip 上传到了CSDN的付费下载区,需要这个文件的朋友可以花费1.9元下载,链接:https://download.csdn.net/download/wenhao_ir/85525449

找这些文件实际是有技巧的,链接 https://blog.csdn.net/wenhao_ir/article/details/125100220 (这个链接中的第1点便是对这个技巧的描述,博主暂时设为仅博主可见,等若干年后博主再公开)

将ippicv_windows_20141027.zip 放于文件夹F:/Build-openCV3.0.0/opencv-3.0.0/3rdparty/ippicv/downloads/windows-b59f865d1ba16e8c84124e19d78eec57/下:
在这里插入图片描述
重新configure,这个错误得到解决。
在这里插入图片描述
接下来根据自己需求进行配置勾选:
我作如下变动:
第一处变动之前:
在这里插入图片描述
第一处变动之后:
在这里插入图片描述
这个变动实际上我是用opencv_world代替我勾选的所有库,我之所以这样做,是因为参考官方的发布,也避免自己将来使用时去配置那么多的lib文件,下图是官方发布的编译好的库。
在这里插入图片描述
接下来添加扩展库的路径:
F:/Build-openCV3.0.0/opencv_contrib-3.0.0/modules
在这里插入图片描述
然后点击Generate,很快就完成了相应的VS2013工程生成。
在这里插入图片描述
接下来我们打开VS2013进行编译处理。
在这里插入图片描述
在这里插入图片描述
得到一堆报错:
在这里插入图片描述
可见,都是由world引起的,难道我上面对配置的修改有问题,那我就重新来配置一下,这次配置就不做选择性修改了,只把扩展模块路径加上。

首先删除所有文件,然后全部重新解压。同时把ippicv_windows_20141027.zip 放于文件夹F:/Build-openCV3.0.0/opencv-3.0.0/3rdparty/ippicv/downloads/windows-b59f865d1ba16e8c84124e19d78eec57/下,注意,没有downloads和windows-b59f865d1ba16e8c84124e19d78eec57文件夹咱们就自己新建一个就是了。

这次过程的相关截图如下:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述在这里插入图片描述
接下来再次进入VS2013 进行编译。
在这里插入图片描述

打开之后等待VS2013把解决方案加载和文件相关分析完成,然后咱们开始编译。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这次编译仍然有问题:
在这里插入图片描述
可见,只成功了9个,失败了88个。

错误一大堆,简直是没法直视…
在这里插入图片描述
与上次Cmake OpenCV-4.1.2源码相比,这次没有出现对OpenBLAS的需求,可见OpenCV3.x可能并不需要OpenBLAS。

这次是OpenCV3.0.0,下篇博文我试下OpenCV3.1.x,如果还是这样的错误,我就把这个问题先放一放。我觉得我的操作应该是没有多大问题的,可能哪天换个开发环境就对了。嗯 ,就这样,先去接孩子吧…

刚才去接孩子的路上,仔细想了想,与其这样去苦苦自己编译,不如直接用别人弄好的,平时注意收集下别人编好的库就行了,要用的时候直接拿来用就是了。

博主2022-06-03 07:57:40注:昨天下午接孩子放学后,博主又试了利用CMake生成OpenCV-3.2.0的VS2013工程,最终因找不到下载不了的文件vgg_generated_64.i而失败放弃…详情见 https://blog.csdn.net/wenhao_ir/article/details/125103083

讲真的,博主对这个问题还是不甘心的,在发布这篇博文后看到CSDN的相关文章推荐里的博文https://blog.csdn.net/qq_40791099/article/details/88667094,这篇博文的博主在生成VS2013工程成功后编译时也遇到几百个语法错误,原因是他用的OpenCV-3.0.0的源码的版本不对,OpenCV-3.0.0的源码分为几个版本,如下:
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
国际上通常对以上各版本的含义约定俗成如下:

  • Alpha版:内部测试版。α是希腊字母的第一个,表示最早的版本,一般用户不要下载这个版本,这个版本包含很多BUG,功能也不全,主要是给开发人员和测试人员测试和找BUG用的。
  • Beta版:公开测试版。β是希腊字母的第二个,顾名思义,这个版本比alpha版发布得晚一些,主要是给“部落”用户和忠实用户测试用的,该版本任然存在很多BUG,但是相对alpha版要稳定一些。这个阶段版本的软件还会不断增加新功能。如果你是发烧友,可以下载这个版本。
  • RC版:Release版,发布版,这个是开源软件的最终发行版,用户可以放心大胆的用了。

另外大家有时候还会看到以下两种版本:

  • Candidate(候选版本),该版本又较beta版更进一步了,该版本功能不再增加,和最终发布版功能一样。这个版本有点像最终发行版之前的一个类似预览版,这个的发布就标明离最终发行版不远了。作为普通用户,如果你很急着用这个软件的话,也可以下载这个版本。
  • Stable版:稳定版。在开源软件中,都有stable版,这个就是开源软件的最终发行版,用户可以放心大胆的用了。

我的OpenCV3.0.0的源码是几年前下的了,隐约记得当时好像下载的是Beta版(从博文 https://blog.csdn.net/wenhao_ir/article/details/50856148的截图来看,我当时用的确实是Beta版),难道是这个的原因,马上试下吧…
OpenCV3.0.0的源码官方下载地址(当前时间2022-06-03下,它在第6页):
https://opencv.org/releases/page/6/
在这里插入图片描述
同样,博主给大家一个它百度网盘的下载链接:
链接:https://pan.baidu.com/s/18lYvXFrRBBhnjp5FMRRrpA?pwd=2pmo

然后是扩展库的下载地址:
https://github.com/opencv/opencv_contrib/releases/tag/3.0.0
同样,博主给大家一个它百度网盘的下载链接:
https://pan.baidu.com/s/1RA_sCdp4VekqzE7CNON-zg?pwd=lh3g

接下来,我们来试验几种情况:

情况一:不要OpenCV-3.0.0的扩展库

由于很多教程都说在CMake的Configure完成后要把扩展库的路径加上,这里博主试下不要扩展库看行不行。

过程截图如下:
在这里插入图片描述
接下来把文件ippicv_windows_20141027.zip 放于文件夹F:/Build-openCV3.0.0/opencv-3.0.0/3rdparty/ippicv/downloads/windows-b59f865d1ba16e8c84124e19d78eec57/下。
注意,没有downloads和windows-b59f865d1ba16e8c84124e19d78eec57文件夹咱们就自己新建一个就是了。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
从上图可见,Configuring done后有很多红色的值,对于红色的值Cmake的提示为Press Configure to update and display new values in red。博主的理解是这些红色的值不一定是错误的值,只是这些值我们可以更改,如果你更改了这些值,那么更改之后需要再按一次Configure,完了之后再按Generate生成VS2013的工程。
这些红色的值我们都不修改,直接Generate吧!
在这里插入图片描述
然后打开VS2013,打开OpenCV.sln解决方案。
在这里插入图片描述
等待解决方案加载和分析完成后开始编译…
在这里插入图片描述
在这里插入图片描述
编译成功:
在这里插入图片描述
上图中的两个错误是因为博主计算机里面的Python解释器是64位的,所以没办法生成32位的程序,下次配置时取消生成OpenCV的Python版本就行了。

从这个过程可以看出,OpenCV的扩展库路径并不是必须要配置的。

从这个过程还可以看出,之前失败的确是因为我们的源码有问题

编译完成后,生成的各文件的分布有点乱,不是我们常常看到的OpenCV官方发布的目录文件结构,我们做如下操作,就可以得到OpenCV官方发布的目录文件结构。
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
这样就得到了OpenCV官方发布的目录文件结构。
在这里插入图片描述
在这里插入图片描述
vc12代表VS2013…
在这里插入图片描述
上面这些库便是没有加扩展库的库…

在这里插入图片描述
把上面截图中的include路径,bin路径和lib库按博文 https://blog.csdn.net/wenhao_ir/article/details/50856148中的方法配置好,然后就可用自己编译生成的OpenCV进行程序开发了。

情况二—不要生成OpenCV的Python版本

根据上一次的结果,接下来我们配置取消生成OpenCV的Python版本。

过程截图如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
接下来取消对Python的编译,如下图所示:
在这里插入图片描述
取消之后再次Confiugre…
在这里插入图片描述
接着Generate…
在这里插入图片描述
打开VS2013,打开解决方案OpenCV.sln
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
可见,取消Python2和Python3的编译后,就一个失败的都没有了…哇哇哇~
在这里插入图片描述
在这里插入图片描述
上面这些生成的库便是没有加扩展库的库…

情况三—生成opencv_world300d.lib和opencv_ts300d.lib

情况一中生成的lib文件太多了,这里导致我们在配置OpenCV环境和发布用OpenCV写生的程序时比较麻烦。所以我尝试下像官方那样生成集合所有lib的opencv_world300d.lib和opencv_ts300d.lib文件。
过程记录如下:
从修改配置这一步开始记录:
修改前:
在这里插入图片描述
修改后:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
编译之后一堆错误…
在这里插入图片描述
可见加上opencv_world的选项后编译是不成功的。

情况四—加上OpneCV的扩展库

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
取消python2和python3的编译,因为我这里的目标平台选择的是Win32,而我系统中的Python解释器是64位。
在这里插入图片描述
加上扩展库的路径:
在这里插入图片描述
再次Configure…
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
确认无误后点击Generate…
在这里插入图片描述
在这里插入图片描述
打开VS2013…打开OpenCV.sln解决方案…
在这里插入图片描述
加载完毕后编译…
在这里插入图片描述
成功编译,没有问题…
接着Install…
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
从上面的截图我们可以看出,的确是把扩展库给加进去了,因为第一个opencv_bgsegm300d.lib就是扩展库里的,它用于视频背景建模。
和之前没有加扩展库的情况对比下吧:
在这里插入图片描述
一对比,发现的确是加进去了。
这一情况下(加了OpenCV3.0.0扩展库的情况)编译好的库的下载链接 https://download.csdn.net/download/wenhao_ir/85541073

关于最近利用Cmake编译OpenCV,过程不容易,曲折,所以写了篇心得体会,链接 https://blog.csdn.net/wenhao_ir/article/details/125102981