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文件:
双击进行開始安装,输入安装位置。单击Extractbutton:
安装过程实质上就是一个解压缩的过程:
安装完毕后存在两个文件夹:build和source。Build文件夹下主要存放了相关的库文件。也就是OpenCv的主体部分。Source文件夹下主要存放了一些帮助文档和官方提供的资源(比如已经训练好的分类器等):
二、配置路径
下载安装完毕之后, 启动VS2012。随意打开一个项目。我们这里新建一个空的Win32控制台应用程序。
在当中调用OpenCv:
这里用红色下划线标记了#include语句,说明当前尚未进行OpenCv配置。OK,接下来開始配置。
1、配置VS路径
单击“项目—>属性”,打开属性对话框:
在“配置属性—>VC++文件夹”节点下,单击“包括文件夹”右側的下来button:
选择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”下拉button,选择“新建”:
新建平台选择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插件介绍的更多相关文章
- C++开发人脸性别识别教程(12)——加入性别识别功能
经过之前几篇博客的解说,我们已经成功搭建了MFC应用框架,并实现了主要的图像显示和人脸检測程序,在这篇博文中我们要向当中加入性别识别代码. 关于性别识别,之前已经专门拿出两篇博客的篇幅来进行解说.这里 ...
- C++开发人脸性别识别教程(10)——加入图片的人脸检測程序
现在我们的MFC框架已经初具规模,能够读取并显示目录下的图片.在这篇博文中我们将向当中加入人脸检測的程序. 一.人脸检測算法 这里我们使用OpenCv封装的Adaboost方法来进行人脸检測,參见:C ...
- C++开发人脸性别识别教程(19)——界面美化
在这篇博文中将完毕<C++开发人脸性别识别>的收尾工作.主要内容分为两部分:加入视频暂定功能.界面规范化. 一 视频暂停功能 严格来说这个视频暂定功能算是视频人脸性别识别的一个遗留问题,本 ...
- C++开发人脸性别识别教程(16)——视频人脸性别识别
在之前的博文中我们已经可以顺利驱动摄像头来採集源图像.在这篇博文中将正式为其加入性别识别的代码,实现摄像头视频的人脸性别识别. 一.人脸检測 在得到摄像头採集的源图像之后,首先要做的就是对其进行人脸检 ...
- C++开发人脸性别识别教程(5)——通过FaceRecognizer类实现性别识别
在之前的博客中已经攻克了人脸检測的问题,我们计划在这篇博客中介绍人脸识别.性别识别方面的相关实现方法. 事实上性别识别和人脸识别本质上是相似的,由于这里仅仅是一个简单的MFC开发,主要工作并不在算法研 ...
- C++开发人脸性别识别教程(7)——搭建MFC框架之界面绘制
在之前的博客中我们已经将项目中用到的算法表述完成,包含人脸检測算法以及四种性别识别算法,在这篇博客中我们将着手搭建主要的MFC框架. 一.框架概况 在这篇博文中我们将搭建最主要的MFC框架.绘制MFC ...
- C++开发人脸性别识别教程(8)——搭建MFC框架之读取目录信息
在上一篇博客中我们已经绘制了MFC界面,在这篇博客中我们将加入响应代码,为MFC框架加入一个最主要的功能:打开一个目录. 一.加入相关头文件 这里头文件主要包括三类:opencv头文件.批量读取文件相 ...
- C++开发人脸性别识别教程(9)——搭建MFC框架之显示图片
在之前的博客中我们已经实现读取用户选定的目录.并将其路径保存在对应的变量中.在这篇博文中我们将介绍怎样借助CvvImage类将图片显示在picture控件中,并自己主动读取目录下的其它图片. 一.加入 ...
- C++开发人脸性别识别教程(6)——通过SVM实现性别识别
http://blog.csdn.net/u013088062/article/details/50480518
随机推荐
- Apache Tez on hive
———————————————————— 调配 Hadoop ———————————————————— 1 将 编译好的 TEZ .tar.gz 文件上传到 HDFS 中. hdfs fs -p ...
- Bootstrap组件之页头、缩略图
.page-header--指定div元素包裹页头组件. <div class="page-header"> <h1>小镇菇凉<small> 2 ...
- 初识BeeFramework
由于近期的项目须要,Hybrid开发成为我開始学习的新知识.非常早之前就了解到两个开发框架--BeeFramework 和 Samurai,可是由于本人一直没有闲暇去研究,所以就一直搁置一旁了.近期才 ...
- C++语言笔记系列之十八——虚函数(1)
1.C++中的多态 (1)多态性:同一个函数的调用能够进行不同的操作,函数重载是实现多态的一种手段. (2)联编:在编译阶段进行联接.即是在编译阶段将一个函数的调用点和函数的定义点联接起来. A.静态 ...
- POJ 题目3237 Tree(Link Cut Tree边权变相反数,求两点最大值)
Tree Time Limit: 5000MS Memory Limit: 131072K Total Submissions: 6131 Accepted: 1682 Description ...
- 服务器共享session的方式
服务器共享session的方式 简介 1. 基于NFS的Session共享 NFS是Net FileSystem的简称,最早由Sun公司为解决Unix网络主机间的目录共享而研发.这个方案实现最为简单, ...
- jqGrid多级表格的实现
原博主链接:http://blog.csdn.net/dreamstar613/article/details/54616503 jqGrid多级表格(可N级) 主要用的方法: subGridRowE ...
- python 3.x 学习笔记6 ( 迭代器 and 生成器 )
1.迭代器(Iterator): 可以被next()函数调用并不断返回下一个值的对象,成为迭代器:Iterator 可以直接用于for 循环的对象统称为可迭代对象:Iterable 迭代,顾名思 ...
- linux系统利用GPU跑数据(tensorflow)
https://blog.csdn.net/qq_26591517/article/details/82469680 查看机器上GPU情况 命令: nvidia-smi 功能:显示机器上gpu的情况 ...
- 多任务-进程之进程池Pool
1.什么是池? 首先从字面上看,池代表着一个容器,用来承载着某些内容的容器,了解到这里,就对进程池有了一个初步的轮廓. 2.什么是进程池Pool? (1)利用现实中的事物来理解: 对于小白初学者,接触 ...