• 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张图的文章,以后的文章也是这样。不知道大家是否能适应哈。

  • 相关阅读:
    在泛型方法中返回泛型数组
    java泛型方法返回泛型结果
    hive -e和hive -f的区别(转)
    hive表批处理
    python网络编程——实现简单聊天
    python网络编程(转)
    python分布式编程(转)
    shell多线程之进程间通信(3)
    在xml文件中使用该控件
    Java文件中代码
  • 原文地址:https://www.cnblogs.com/wzjhoutai/p/7044097.html
Copyright © 2020-2023  润新知