win7+VS2013下编译OpenCV3.4与到的一些坑

win7+VS2013下编译OpenCV3.4与到的一些坑

  1. 编译前的准备
  2. 编译过程
  3. 遇到的问题

1、编译前的准备
1.1、安装win7系统和下载VS2013并安装
1.2、下载OpenCV3.4 GitHub 链接 https://github.com/opencv/opencv/releases
1.3、在 GitHub 中下载 opencv_contrib 的源码压缩包 (此包中包含了OpenCV还未正式发布的一些扩展功能) GitHub 链接 https://github.com/opencv/opencv_contrib/releases/tag/3.4.0
1.4、下载 cmake-3.10.0-win64-x64.zip 压缩包,到 /bin 目录下,点击 cmake-gui 运行。
注:根据操作系统的不同,选择相应的版本,cmake 下载页 https://cmake.org/download/
(此工具为了将下载的OpenCV源码生成VS的工程代码,在配置是需要根据自己的电脑环境进行配置)

2、编译过程
2.1、cmake 编译OPenCV3.4
将OpenCV源代码转换成VS工程代码,步骤如下:
在解压后的 cmake 目录中,找到 /bin 下的 cmake-gui.exe,点击运行,如下所示
win7+VS2013下编译OpenCV3.4与到的一些坑_第1张图片
其中, source 路径指向解压后的 “opencv-master”,build 路径可指向自己建的一个 “build” 文件夹

设置好路径后,点击左下角的 Configure 按钮,弹出窗口,如下所示
win7+VS2013下编译OpenCV3.4与到的一些坑_第2张图片
点击 Finish 按钮,继续,此时主界面的 Configure 按钮变为 Stop,表示配置进行中

注意:如遇到问题,先检查错误信息;然后,点击 File -> Delete Cache,退出 cmake-gui,并将 build 文件夹内的内容清空,再重复步骤 2.1 和 2.2,

等 Configure 依次结束后,如果 cmake 的主界面仍有红色区域,则再次点击 Configure 进行配置,直到红色区域完全消失。
win7+VS2013下编译OpenCV3.4与到的一些坑_第3张图片
下图是 Configure 完成后的界面,红色消失,只剩白色的区域
win7+VS2013下编译OpenCV3.4与到的一些坑_第4张图片
2.2、cmake编译opencv_contrib-master 添加扩展库opencv_contrib
找到 Name 下的 OPENCV_EXTRA_MODULES_PATH,为其设置 opencv_contrib-master 的路径 ,精确到 /modules 目录
win7+VS2013下编译OpenCV3.4与到的一些坑_第5张图片
如果电脑没有CUDA,勾选掉以下位置
win7+VS2013下编译OpenCV3.4与到的一些坑_第6张图片
再次点击 Configure 进行配置,可能需要 Configure 两三次之后,红色区域才能完全消失。
最后,点击 Generate,出现 “Generating done” 则意味着 cmake 的工作结束了。
win7+VS2013下编译OpenCV3.4与到的一些坑_第7张图片
2.3、VS生成
使用VS2013打开 cmake生成的OpenCV.sln工程,然后点击编译ALL_BUILD,如果没有问题再点击编译INSTALL,最终将生成OpenCV3.4所有的库文件。

3、VS编译时常常遇到的问题
3.1、错误 1 error C2146: 语法错误: 缺少“;”(在标识符“index1”的前面) (E:\opencv3.4\opencv-3.4.0\opencv_contrib-3.4.0\modules\face\src\getlandmarks.cpp) e:\opencv3.4\opencv-3.4.0\opencv_contrib-3.4.0\modules\face\src\face_alignmentimpl.hpp 24 1 opencv_face
win7+VS2013下编译OpenCV3.4与到的一些坑_第8张图片
解决方法:
按F10会跳转到错误位置,无法识别uint64_t, 加入#include即可
win7+VS2013下编译OpenCV3.4与到的一些坑_第9张图片
修改成
win7+VS2013下编译OpenCV3.4与到的一些坑_第10张图片
3.2 错误 二 缺少:error LNK1104: 无法打开文件“python35_d.lib”
解决方案一
-网上下载 python35_d.lib
-找到opencv_python3项目,-链接器->输入->附加依赖项 -编辑,把下载的python35_d.lib路径添加进来,再生成,成功
此解决方案有时会出现
win7+VS2013下编译OpenCV3.4与到的一些坑_第11张图片
此时需要将在OpenCV项目的bindings中的opencv_python项目中,点击“外部依赖项”,在其中找到object.h文件:object.h中修改如下:

/* Py_DEBUG implies Py_TRACE_REFS. */
#if defined(Py_DEBUG) && !defined(Py_TRACE_REFS)
#define Py_TRACE_REFS
#endif

修改为:

/* Py_DEBUG implies Py_TRACE_REFS. */
#if defined(Py_DEBUG) && !defined(Py_TRACE_REFS)
//#define Py_TRACE_REFS
#endif

保存,再次编译成功。

解决方案二
如果觉得下载python35_d.lib麻烦,其实可以直接使用Python35.lib。这样只需要做如下修改
在OpenCV项目的bindings中的opencv_python项目中,点击“外部依赖项”,在其中找到pyconfig.h和object.h文件:

在pyconfig.h中

#ifdef MS_COREDLL
#   ifndef Py_BUILD_CORE /* not building the core - must be an ext */
#       if defined(_MSC_VER)
            /* So MSVC users need not specify the .lib file in
            their Makefile (other compilers are generally
            taken care of by distutils.) */
#           if defined(_DEBUG)
#               pragma comment(lib,"python35_d.lib")
#           elif defined(Py_LIMITED_API)
#               pragma comment(lib,"python3.lib")
#           else
#               pragma comment(lib,"python35.lib")
#           endif /* _DEBUG */
#       endif /* _MSC_VER */
#   endif /* Py_BUILD_CORE */
#endif /* MS_COREDLL */

修改为

#ifdef MS_COREDLL
#   ifndef Py_BUILD_CORE /* not building the core - must be an ext */
#       if defined(_MSC_VER)
            /* So MSVC users need not specify the .lib file in
            their Makefile (other compilers are generally
            taken care of by distutils.) */
#           if defined(_DEBUG)
//#             pragma comment(lib,"python35_d.lib")
#               pragma comment(lib,"python35.lib")
#           elif defined(Py_LIMITED_API)
#               pragma comment(lib,"python3.lib")
#           else
#               pragma comment(lib,"python35.lib")
#           endif /* _DEBUG */
#       endif /* _MSC_VER */
#   endif /* Py_BUILD_CORE */
#endif /* MS_COREDLL */

再找到object.h文件:object.h中修改如下:

/* Py_DEBUG implies Py_TRACE_REFS. */
#if defined(Py_DEBUG) && !defined(Py_TRACE_REFS)
#define Py_TRACE_REFS
#endif

修改为:

/* Py_DEBUG implies Py_TRACE_REFS. */
#if defined(Py_DEBUG) && !defined(Py_TRACE_REFS)
//#define Py_TRACE_REFS
#endif

保存,再次编译成功。

你可能感兴趣的:(opencv学习)