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

相关文章

SpringBoot集成redisson实现延时队列教程

《SpringBoot集成redisson实现延时队列教程》文章介绍了使用Redisson实现延迟队列的完整步骤,包括依赖导入、Redis配置、工具类封装、业务枚举定义、执行器实现、Bean创建、消费... 目录1、先给项目导入Redisson依赖2、配置redis3、创建 RedissonConfig 配

基于 Cursor 开发 Spring Boot 项目详细攻略

《基于Cursor开发SpringBoot项目详细攻略》Cursor是集成GPT4、Claude3.5等LLM的VSCode类AI编程工具,支持SpringBoot项目开发全流程,涵盖环境配... 目录cursor是什么?基于 Cursor 开发 Spring Boot 项目完整指南1. 环境准备2. 创建

C++右移运算符的一个小坑及解决

《C++右移运算符的一个小坑及解决》文章指出右移运算符处理负数时左侧补1导致死循环,与除法行为不同,强调需注意补码机制以正确统计二进制1的个数... 目录我遇到了这么一个www.chinasem.cn函数由此可以看到也很好理解总结我遇到了这么一个函数template<typename T>unsigned

mybatis映射器配置小结

《mybatis映射器配置小结》本文详解MyBatis映射器配置,重点讲解字段映射的三种解决方案(别名、自动驼峰映射、resultMap),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定... 目录select中字段的映射问题使用SQL语句中的别名功能使用mapUnderscoreToCame

Linux下MySQL数据库定时备份脚本与Crontab配置教学

《Linux下MySQL数据库定时备份脚本与Crontab配置教学》在生产环境中,数据库是核心资产之一,定期备份数据库可以有效防止意外数据丢失,本文将分享一份MySQL定时备份脚本,并讲解如何通过cr... 目录备份脚本详解脚本功能说明授权与可执行权限使用 Crontab 定时执行编辑 Crontab添加定

Java使用jar命令配置服务器端口的完整指南

《Java使用jar命令配置服务器端口的完整指南》本文将详细介绍如何使用java-jar命令启动应用,并重点讲解如何配置服务器端口,同时提供一个实用的Web工具来简化这一过程,希望对大家有所帮助... 目录1. Java Jar文件简介1.1 什么是Jar文件1.2 创建可执行Jar文件2. 使用java

C++统计函数执行时间的最佳实践

《C++统计函数执行时间的最佳实践》在软件开发过程中,性能分析是优化程序的重要环节,了解函数的执行时间分布对于识别性能瓶颈至关重要,本文将分享一个C++函数执行时间统计工具,希望对大家有所帮助... 目录前言工具特性核心设计1. 数据结构设计2. 单例模式管理器3. RAII自动计时使用方法基本用法高级用法

SpringBoot 多环境开发实战(从配置、管理与控制)

《SpringBoot多环境开发实战(从配置、管理与控制)》本文详解SpringBoot多环境配置,涵盖单文件YAML、多文件模式、MavenProfile分组及激活策略,通过优先级控制灵活切换环境... 目录一、多环境开发基础(单文件 YAML 版)(一)配置原理与优势(二)实操示例二、多环境开发多文件版

Vite 打包目录结构自定义配置小结

《Vite打包目录结构自定义配置小结》在Vite工程开发中,默认打包后的dist目录资源常集中在asset目录下,不利于资源管理,本文基于Rollup配置原理,本文就来介绍一下通过Vite配置自定义... 目录一、实现原理二、具体配置步骤1. 基础配置文件2. 配置说明(1)js 资源分离(2)非 JS 资

使用docker搭建嵌入式Linux开发环境

《使用docker搭建嵌入式Linux开发环境》本文主要介绍了使用docker搭建嵌入式Linux开发环境,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录1、前言2、安装docker3、编写容器管理脚本4、创建容器1、前言在日常开发全志、rk等不同