C++开发人脸性别识别教程(3)——OpenCv配置和ImageWatch插件介绍

本文主要是介绍C++开发人脸性别识别教程(3)——OpenCv配置和ImageWatch插件介绍,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

  OpenCv是C++图像处理的重要工具,这个人脸性别识别的项目就是借助OpenCv进行开发的。虽然网上已经有了很多关于OpenCv的配置教程,但出于教程完整性考虑,这里还是用专门的一篇博客来介绍OpenCv的具体配置方法,同时也介绍一下OpenCv中的一个强有力的图像处理插件——ImageWatch。

  由于这个程序是一年前写的,当时的OpenCv的最新版本为2.4.9(现在已经更新到了3.0),并且2.4.9版本和3.0版本在配置方法上稍有不同,这里我仍以2.4.9版本为例来介绍配置方法,有关3.0的新特性以及配置方法大家可以参考网络资源。

  一、OpenCv的下载安装

  首先,给出OpenCv的官方下载地址:OpenCv下载。

  下载完成后,得到一个大约300M左右的exe文件:

 

  双击进行开始安装,输入安装位置,单击Extract按钮:

 

  安装过程实质上就是一个解压缩的过程:

  安装完成后存在两个目录:build和source。Build目录下主要存放了相关的库文件,也就是OpenCv的主体部分。Source目录下主要存放了一些帮助文档和官方提供的资源(例如已经训练好的分类器等):

 

  二、配置路径

  下载安装完成之后, 启动VS2012,任意打开一个项目。我们这里新建一个空的Win32控制台应用程序。在其中调用OpenCv:

  这里用红色下划线标记了#include语句,说明当前尚未进行OpenCv配置。OK,接下来开始配置。

  1、配置VS路径

  单击“项目—>属性”,打开属性对话框:

 

  在“配置属性—>VC++目录”节点下,单击“包含目录”右侧的下来按钮:

 

  选择OpenCv目录下的include文件夹路径:

 

  同理,在“库目录”中添加lib文件夹路径:

 

  这里有两点需要说明:

  (1)X64。在build文件夹下有两个文件X86和X64,X86是针对32位windows系统的,X64是针对64位系统的。由于我的电脑是64位win7,所以理所当然选择了X64,不过需要说明的一点是64位系统下同样可以使用X86下的文件,只要将调试器设置为win32即可。

  (2)VC11。在X86和X64文件夹下分别都有三个文件夹:V10、V11、V12。其中V10适用于VS2010,V11使用于VS2012,V12适用于VS2013(当时还未发布VS20150),我们这里选择VS11文件夹。

  接下来在“配置属性—>链接器—>输入”节点下,在“附加依赖项”窗口中输入以下OpenCv库文件名称:
  opencv_calib3d249d.lib

  opencv_core249d.lib

  opencv_features2d249d.lib

  opencv_flann249d.lib

  opencv_gpu249d.lib

  opencv_highgui249d.lib

  opencv_imgproc249d.lib

  opencv_legacy249d.lib

  opencv_ml249d.lib

  opencv_objdetect249d.lib

  opencv_ts249d.lib

  opencv_video249d.lib

  opencv_contrib249d.lib

  opencv_nonfree249d.lib

 

  单击应用,关闭设置窗口。

  2、配置环境变量

  Windows系统的环境变量几乎是所有编程软件必须折腾的地方,因为编译器在启动时都会通过环境变量来自动读取搜索路径。

  至于如何打开环境变量窗口这里就不再赘述,这里需要将OpenCv的bin(可执行文件)目录的路径“”添加到环境变量中:

 

  配置完成后,重启VS,再次输入include命令,发现在VS给出的提示列表中出现了“OpenCv2”这一项,初步认定配置完成:

 

  接下来我们编写一个小程序来测试OpenCv:读取F盘根目录下的一张彩色图片,灰度化,然后显示,代码如图:

 

  按下F7进行编译,程序报错,类型为“error LNK2019: 无法解析的外部符号……”。这是因为程序默认使用了32位的Debug调试器,而我们配置的是64位的opencv,因此需要使用64位的Debug调试器。单击工具栏“win32”对应的下拉菜单,选择配置管理器:

 

  在弹出的窗口中单击“Win32”下拉按钮,选择“新建”:

  新建平台选择X64:

 

  单击确定,关闭设置对话框,此时我们已经创建了一个64位的Debug调试器,接下来在调试器栏选择这个64位调试器即可:

 

  再次按下F7,编译成功。F5,调试成功。Ctrl+F5,程序顺利运行,显示图片。

  三、ImageWatch插件

  接下来介绍OpenCv的一个强力的VS辅助插件:ImageWatch。

  1、外观

  首先强调一点,ImageWatch必须在调试过程中才能起作用,要想使用ImageWatch相应的就要给程序设置一些断点来使程序暂停。首先,给出ImageWatch的外观:

 

  可以看出,ImageWatch能够实时的显示出当前程序中的图片(确切的说是Mat矩阵)信息,包括尺寸、像素、外观等等,着无疑给程序的调试带来了相当的大的便利。接下来我们详细介绍一下这个插件的功能。

  2、ImageWatch插件安装

  首先,给出一篇我之前写的关于ImageWatch插件教程:ImageWatch教程。

  ImageWatch官方帮助文档:帮助文档。

  ImageWatch下载地址:下载地址。

  下载完成后,双击安装即可。安装过程中会自动识别当前已安装的编译器,选择VS2012即可。

  安装完成后,需要手动启用这个插件。打开VS,单击“视图—>其他窗口—>ImageWatch”:

  此时再次设置断点,F5调试,ImageWatch正常工作。接下来我们介绍它的几个常用功能。

  3、常用功能

  (1)图片查看

  能够实时显示当前图片的状态,缩略图等,这点不必多说:

  (2)查看像素信息

  将鼠标放在右侧预览窗口,上方标题栏会实时显示当前鼠标指针所在像素的位置坐标以及像素值、缩放比例(从左往右依次是坐标值和像素值、缩放比例):

  在预览窗口中按下“Ctrl+鼠标滚轮”,会对图片进行放大和缩小,直至放大到可以看清像素值(彩色图像由三个值,RGB):

  4、保存图片

  ImageWatch可以方便的将当前的图片保存下来,只需在对应图标上单击右键,在快捷菜单中选择“Dump to File”即可:

  ImageWatch还有更多功能,例如图像的关联显示等等,详细功能请大家参加之前提供的博客以及官方帮助文档,这里就不再赘述。

  四、总结

  这是本套教程准备部分的最后一篇文档,在接下里的博客中我们将开始编写代码。这里说几个需要注意的事项:

  (1)OpenCv还是建议大家用新版。OpenCv的发展经历了1.x、2.x,到如今的3.0版。1.x版本的OpenCv只提供了C语言的接口,其中的所有的API函数都以“cv”开头,只有结构体,没有类结构,用Iplimage指针类型表示图像等等。不等不说,OpenCv的发展趋于完善,2.4系列版本是公认的成熟版本。不过前两天我在浏览OpenCv官网的时候发现在3.0版本中出现了很多比较新的算法,例如DeepLearning,因此建议搞图像处理算法的同行们还是去尝试使用一下3.0版本吧。

  (2)写教程要多用图。这段话可能说得让大家有些莫名其妙,但我觉得有必要拿出来说一说。以前我写教程时大多长话连篇、恨不得连代码都想用语言叙述出来,后来我在翻译《最全Pycharm教程》的过程中,深深体会到了图文并茂的重要性,也深深的体会到了歪果仁在编程、叙事方面的严谨。所以我也吸取了经验,用图说话,于是你就看到了这篇不到2500字,但有着23张图的文章,以后的文章也是这样,不知道大家能否适应哈。

这篇关于C++开发人脸性别识别教程(3)——OpenCv配置和ImageWatch插件介绍的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1115521

相关文章

使用Python和OpenCV库实现实时颜色识别系统

《使用Python和OpenCV库实现实时颜色识别系统》:本文主要介绍使用Python和OpenCV库实现的实时颜色识别系统,这个系统能够通过摄像头捕捉视频流,并在视频中指定区域内识别主要颜色(红... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间详解

Windows下C++使用SQLitede的操作过程

《Windows下C++使用SQLitede的操作过程》本文介绍了Windows下C++使用SQLite的安装配置、CppSQLite库封装优势、核心功能(如数据库连接、事务管理)、跨平台支持及性能优... 目录Windows下C++使用SQLite1、安装2、代码示例CppSQLite:C++轻松操作SQ

C++中RAII资源获取即初始化

《C++中RAII资源获取即初始化》RAII通过构造/析构自动管理资源生命周期,确保安全释放,本文就来介绍一下C++中的RAII技术及其应用,具有一定的参考价值,感兴趣的可以了解一下... 目录一、核心原理与机制二、标准库中的RAII实现三、自定义RAII类设计原则四、常见应用场景1. 内存管理2. 文件操

C++中零拷贝的多种实现方式

《C++中零拷贝的多种实现方式》本文主要介绍了C++中零拷贝的实现示例,旨在在减少数据在内存中的不必要复制,从而提高程序性能、降低内存使用并减少CPU消耗,零拷贝技术通过多种方式实现,下面就来了解一下... 目录一、C++中零拷贝技术的核心概念二、std::string_view 简介三、std::stri

C++高效内存池实现减少动态分配开销的解决方案

《C++高效内存池实现减少动态分配开销的解决方案》C++动态内存分配存在系统调用开销、碎片化和锁竞争等性能问题,内存池通过预分配、分块管理和缓存复用解决这些问题,下面就来了解一下... 目录一、C++内存分配的性能挑战二、内存池技术的核心原理三、主流内存池实现:TCMalloc与Jemalloc1. TCM

OpenCV实现实时颜色检测的示例

《OpenCV实现实时颜色检测的示例》本文主要介绍了OpenCV实现实时颜色检测的示例,通过HSV色彩空间转换和色调范围判断实现红黄绿蓝颜色检测,包含视频捕捉、区域标记、颜色分析等功能,具有一定的参考... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间

Redis Cluster模式配置

《RedisCluster模式配置》:本文主要介绍RedisCluster模式配置,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录分片 一、分片的本质与核心价值二、分片实现方案对比 ‌三、分片算法详解1. ‌范围分片(顺序分片)‌2. ‌哈希分片3. ‌虚

Python实例题之pygame开发打飞机游戏实例代码

《Python实例题之pygame开发打飞机游戏实例代码》对于python的学习者,能够写出一个飞机大战的程序代码,是不是感觉到非常的开心,:本文主要介绍Python实例题之pygame开发打飞机... 目录题目pygame-aircraft-game使用 Pygame 开发的打飞机游戏脚本代码解释初始化部

SpringBoot项目配置logback-spring.xml屏蔽特定路径的日志

《SpringBoot项目配置logback-spring.xml屏蔽特定路径的日志》在SpringBoot项目中,使用logback-spring.xml配置屏蔽特定路径的日志有两种常用方式,文中的... 目录方案一:基础配置(直接关闭目标路径日志)方案二:结合 Spring Profile 按环境屏蔽关

C++ 函数 strftime 和时间格式示例详解

《C++函数strftime和时间格式示例详解》strftime是C/C++标准库中用于格式化日期和时间的函数,定义在ctime头文件中,它将tm结构体中的时间信息转换为指定格式的字符串,是处理... 目录C++ 函数 strftipythonme 详解一、函数原型二、功能描述三、格式字符串说明四、返回值五