编译OpenCV源码

under Qt  OpenCV  tag OpenCV    Published on April 16th , 2020 at 10:44 pm

放在开头:常见编译器对应的OpenCV库

  1. Mingw

OpenCV介绍

OpenCV 是(Open Source Computer Vision Library)的简称,在计算机视觉领域中是一个非常重要的开源库,该库使用的是BSD开源协议,它允许你使用源代码进行你自己项目的开发。

如何选择版本

刚接触OpenCV可能都会考虑一个问题:选那个版本好呢?
有人说选2., 有人说3.的好,到底那个版本比较合适,是一个比较难决定的问题。
这个问题的核心不在于各个版本之间有什么差别,而在于你需要OpenCV来做什么:
如果你只是刚刚学习,对OpenCV还不熟悉,那么就不用纠结,随便下载一个最新或者次新版本,安装上尝试一下就好,如果你的工作环境非常特殊,项目是从前辈那里接手的,也不用纠结,用子前项目的版本。总之,没有哪一个版本好与不好之分,只有版文适合还是不适合你。

如何安装

OpenCV提供编译好的Visual Studio(VC编译器)可以直接使用的库,但是在其他不是使用VC编译器的环境下就无法使用了,所以得学会自己编译CV源码。自己编译CV源码时会遇到很多很多问题,很多人无法正常配置成功,但是正是因为问题多,网上相关的教程帖子也多,多百度百度配置成功的概率还是很大的。

下载软件和工具

在安装软件之前看一下自己的工作平台是Windows还是Linux。这两个平台对应的开发工具(编译器)是不一样的如下图:

在windows开发主要用visual studio。visual studio有很多版本,不同版本的visual studio不能通用一个OpenCV库,因为不同版本的vs对应不同版本的VC编译器,而可直接使用的OpenCV库必须是对应的VC编译器编译成的。

OpenCV官网给出了windows版本的下载包其中就包含已经编译好的库,需要配合相应版本的vs才可以直接使用,其他情况下需要自己编译。

自己编译OpenCV库通常需要两个源码以及一个编译工具

  1. OpenCV源代码
  2. 对应的opencv_contrib
  3. CMake

首先下载OpenCV源码,打开githubOpenCV。点击releases就可以找到并下载你需要的对应的版本

然后下载和opencv 版本相同 的opencv_contrib源代码,并将两部分源代码解压到你的电脑里。

使用CMake编译源码

注:这里的示例是为Qt配置OpenCV,Qt官方教程

1. 配置Qt和Mingw

打开QtCreator,在Kits-构建套件,选中Desktop Qt 版本号 MinGW bit,设为默认,OK。

2. 添加 MinGW 到环境变量

为系统变量 Path 添加 E:QtQt5.9.3Toolsmingw530_32bin

验证Mingw是否配置成功:在终端中输入gcc -v,如果有输入则说明配置成功

3. 使用 CMake 生成 OpenCV 的 Makefile

打开 cmake-gui,设置源码和生成路径:

  • Where is the source code: E:/2_Technology/Program/OpenCV/opencv-4.2.0
  • Where to build the binaries:E:/2_Technology/Program/OpenCV/opencv-4.2.0/build

点击 Configure,设置编译器

  • Specify the generator for this project: MinGW Makefiles
  • Specify native compilers(如果Mingw配置成功则可以使用默认选项)
  • Next
  • Compilers C: C:/Qt/Tools/mingw730_64/bin/gcc.exe
  • Compilers C++: C:/Qt/Tools/mingw730_64/bin/g++.exe
  • Finish

编译配置:

  • 勾选 WITH_QT
  • 勾选 WITH_OPENGL
  • 不勾选 WITH_IPP
  • OPENCV_EXTRA_MODULES_PATH:
    E:\2_Technology\Program\OpenCV\opencv-4.2.0\opencv_contrib-4.2.0\modules

点击 Configure,再次配置:

  • 设置 QT5_DIR 为C:/Qt/5.14.1/mingw73_64/lib/cmake/Qt5
  • 设置 Qt5Concurrent_DIR 为 C:/Qt/5.14.1/mingw73_64/lib/cmake/Qt5Concurrent
  • 设置 Qt5Core_DIR 为 C:/Qt/5.14.1/mingw73_64/lib/cmake/Qt5Core
  • 设置 Qt5Gui_DIR 为 C:/Qt/5.14.1/mingw73_64/lib/cmake/Qt5Gui
  • 设置 Qt5Test_DIR 为 C:/Qt/5.14.1/mingw73_64/lib/cmake/Qt5Test
  • 设置 Qt5Widgets_DIR 为 C:/Qt/5.14.1/mingw73_64/lib/cmake/Qt5Widgets
  • 设置 Qt5OpenGL_DIR 为 C:/Qt/5.14.1/mingw73_64/lib/cmake/Qt5OpenGL
  • 设置 CMAKE_BUILD_TYPE 为 Release 或者 RelWithDebInfo

点击 Generate 生成 Makefile

4. 编译OpenCV

打开终端进行编译:(-j x是使用x个线程进行编译, On an 8 core CPU, you can set it to 8 or higher, so all cores are used.)

E:
cd E:\2_Technology\Program\OpenCV\opencv-4.2.0\build
mingw32-make -j 8
mingw32-make install

编译常见错误

1. 多线程编译错误信息不明确

表现

Makefile:161: recipe for target 'all' failed
mingw32-make: *** [all] Error 2

解决

使用单线程编译:

mingw32-make

本文由simyng创作, 采用知识共享署名4.0 国际许可协议进行许可,转载前请务必署名
  文章最后更新时间为:April 16th , 2020 at 02:44 pm