《OpenCV图像处理》——1.4 使用OpenCV创建用户项目

简介:

本节书摘来自华章计算机《OpenCV图像处理》一书中的第1章,第1.4节,作者:[西]葛罗瑞亚·布埃诺·加西亚(Gloria Bueno García)著,更多章节内容可以访问云栖社区“华章计算机”公众号查看

1.4 使用OpenCV创建用户项目

本书中,我们假定C++是图像处理应用编程的主要语言,尽管实际上也提供了其他编程语言的接口和封装器(例如,Python、Java、MATLAB/Octave等)。
本节说明如何用OpenCV的C++ API(一种易用的跨平台框架)开发应用。
1.4.1 库的一般使用方法
为了用C++开发一个OpenCV应用,需要在代码中:
包含OpenCV的头文件定义
链接OpenCV库(二进制文件),以获取最终的可执行文件
OpenCV头文件位于OPENCV_BUILDinstallincludeopencv2目录中,此处对于每个模块都有一个文件(*.hpp)。用#include指令包含头文件,如下所示:
screenshot

用这个指令,可以包含用户程序所需的每个头文件。另一方面,如果包含opencv.hpp头文件,那么所有的头文件都将被自动包含,如下所示:
screenshot

记住,本地安装的所有模块都在OPENCV_BUILDinstallincludeopencv2opencv_modules.hpp头文件中定义,并在OpenCV的构建过程中自动生成。
#include指令的使用并非总能保证对头文件的正确包含,因为告诉编译器在哪里能找到包含文件是有必要的。这一点可以通过传递具有文件位置的一个特殊参数来实现(例如,对于GNU编译器为I< location>)。
链接过程需要提供(动态或静态)链接库,在这里可以找到所需的OpenCV功能。这个过程通常用链接器的两种类型参数完成:库的位置(例如,GNU编译器的-L< location>)和库的名字(例如,-l< module_name>)。

1.4.2 开发新项目的工具
开发我们自己的OpenCV C++应用的主要先决条件是:
OpenCV头文件和库二进制文件:当然,我们需要编译OpenCV,并且对这样一个编译,辅助库是先决条件。该代码包应该使用与生成用户应用程序相同的编译器来编译。
一个C++编译器:一些关联工具用作代码编辑器、调试器、项目管理器、构建过程管理器(build process manager)(例如,CMake)、修订控制系统(revision control system)(例如,Git、Mercurial、SVN等)、类检测器(class inspector)等是方便的。通常,这些工具在一个集成开发环境(Integrated Development Environment,IDE)中一起进行配置。
任何其他辅助库:有时编写最终应用程序所需的任何其他辅助库,例如绘图、统计等,可能是需要的。
对于编写OpenCV C++应用,最流行的可用编译工具包是:
Microsoft Visual C(MSVC):只在Windows上支持,与IDE Visual Studio集成得很好,当然也可以与其他跨平台的IDE集成,例如,Qt生成器或Eclipse。与目前最新的OpenCV发布兼容的MSVC版本是VC 10、VC 11和VC 12(Visual Studio 2010、2012和2013)。
GNU Compiler Collection GNU GCC:这是由GNU项目开发的一个跨平台的编译器系统。对于Windows来说,该工具包就是众所周知的MinGW(最小的GNU GCC)。与目前OpenCV发布兼容的版本是GNU GCC 4.8。该工具包可以和若干IDE一起使用,例如,Qt生成器、Code::Blocks、Eclipse等。
对于本书提供的示例,我们为Windows+Qt 5.2.1库和Qt生成器IDE(3.0.1)使用MinGW 4.8编译工具包。编译OpenCV需要跨平台Qt库所提供的新UI功能。

Qt生成器是一个针对C++的跨平台IDE,它集成了我们编写应用时所需的工具。在Windows中,可以使用MinGW或MSVC。图1-3展示了对于一个OpenCV C++项目具有不同的面板和视图的Qt生成器的主窗口:

screenshot

1.4.3 使用Qt生成器创建OpenCV C++程序
接下来,我们说明如何用Qt生成器的IDE创建代码项目。特别地,我们将这个描述应用到一个OpenCV示例上。
使用Qt生成器,可以为任意OpenCV应用程序创建项目。要做到这一点,需要导航到File | New File or File | Project,然后导航到Non-Qt Project | Plain C++ Project。之后,必须选择一个项目名字和将要存储的位置。再下一步,为该项目(在该示例中,台式机为Qt 5.2.1 MinGW 32位)选择一个工具包(即编译器),并为生成的二进制文件定位。通常,使用两种可能的方法构建配置(配置文件):debug和release。这些配置文件设置合适的标志(f?lag)来构建和运行二进制文件。
使用Qt生成器创建一个项目时,生成两个特殊文件(具有.pro和.pro.user扩展名)来配置构建和运行过程。该构建过程是通过项目创建期间所选择的工具包确定的。对于Qt 5.2.1 MinGW 32位包,这个过程则依赖于qmake和mingw32-make工具。使用*.pro文件作为输入,qmake会为驱动每个配置文件(即,release和debug)的构建过程,产生该生成文件。在Qt生成器IDE中使用qmake工具替代CMake,可简化软件项目的构建过程。只需几行信息,即可自动产生生成文件。
以下代码行表示一个*.pro文件的示例(例如,showImage.pro):
screenshot

上面的文件说明qmake所需的选项,以便为项目构建二进制代码产生合适的生成文件。以一个标签开始的每一行,指定一个选项(TARGET、CONFIG、SOURCES、INCLUDEPATH和LIBS),后跟一个标志来添加(+=)或删除(-=)该选项的值。在这个示例项目中,使用非Qt控制台应用。可执行文件是showImage.exe(TARGET)和源文件showImage.cpp(SOURCES)。因为这个项目是一个基于OpenCV的应用,所以后两个标签指定头文件的位置(INCLUDEPATH)以及由这个特定项目(core、imgcodecs、highgui和imgproc)所使用的OpenCV库(LIBS)。注意,行尾的反斜线表示续行。

相关文章
|
3月前
|
存储 算法 数据可视化
使用计算机视觉实战项目精通 OpenCV:6~8
使用计算机视觉实战项目精通 OpenCV:6~8
47 0
|
3月前
|
计算机视觉
使用计算机视觉实战项目精通 OpenCV:1~5
使用计算机视觉实战项目精通 OpenCV:1~5
71 0
|
3月前
|
openCL 开发工具 C语言
OpenCV 图像处理学习手册:6~7
OpenCV 图像处理学习手册:6~7
77 0
|
3月前
|
存储 编解码 算法
OpenCV 图像处理学习手册:1~5
OpenCV 图像处理学习手册:1~5
31 0
|
14天前
|
存储 算法 Linux
【实战项目】网络编程:在Linux环境下基于opencv和socket的人脸识别系统--C++实现
【实战项目】网络编程:在Linux环境下基于opencv和socket的人脸识别系统--C++实现
38 6
|
2月前
|
人工智能 Linux API
OpenCV这么简单为啥不学——1.1、图像处理(灰度图、模糊图片、GaussianBlur函数、提取边缘、边缘膨胀、边缘细化)
OpenCV这么简单为啥不学——1.1、图像处理(灰度图、模糊图片、GaussianBlur函数、提取边缘、边缘膨胀、边缘细化)
46 0
|
4月前
|
缓存 算法 计算机视觉
OpenCV图像处理-视频分割静态背景-MOG/MOG2/GMG
1.概念介绍 视频背景扣除原理:视频是一组连续的帧(一幅幅图组成),帧与帧之间关系密切(GOP/group of picture),在GOP中,背景几乎是不变的,变的永远是前景。
88 0
|
2月前
|
编解码 算法 自动驾驶
探索OpenCV:图像处理的利器
探索OpenCV:图像处理的利器
30 0
|
3月前
|
计算机视觉 C++ Windows
C++VS2019中配置opencv(在空项目中配置opencv和在cmake中配置opencv)-解决的问题 找不到opencv_world440d.dll
C++VS2019中配置opencv(在空项目中配置opencv和在cmake中配置opencv)-解决的问题 找不到opencv_world440d.dll
26 0
|
4月前
|
机器学习/深度学习 并行计算 算法
OpenCV简介、导入及图像处理基础方法讲解(图文解释 附源码)
OpenCV简介、导入及图像处理基础方法讲解(图文解释 附源码)
47 0