本书以CImage类为基础介绍了Visual C++.NET环境下的图像基础知识与图像处理常用算法的编程原理和方法。通过自建CImage仿真类,本书方法也适用于Visual C++环境。\r\n 本书包括4个部分。第1部分介绍图像显示与存储的基础知识;第2部分介绍Visual C++.NET应用程序框架的建立,图形编程,图像的存取、显示与生成,以及图像的变化;第3部分介绍图像的点处理,邻域处理,二值图像的处理,形态学图像处理,彩色图像的处理,轮廓跟踪与线段编码;第4部分介绍CImage仿真类的建立与图像文件的读写。\r\n 本书附有光盘,提供了演示程序的全部源代码以及处理所需的图像实例。\r\n 本书可作为计算机及相关专业数字图像处理的教材或教学参考书,也可作为电子、信息类专业的学生与科研人员在图像处理方面的参考书或程序库。\r\n\r\n
第1章 图像基础知识 \r\n 1.1 数字图像与图像处理 \r\n 1.1.1 图像 \r\n 1.1.2 数字图像 \r\n 1.1.3 图像处理的主要内容 \r\n 1.2 颜色模式 \r\n 1.2.1 颜色的分类和特性 \r\n 1.2.2 RGB颜色模式\r\n 1.2.3 CMYK颜色模式\r\n 1.2.4 HSV(HSB、HLS)颜色模式 \r\n 1.3 彩色图像显示原理\r\n 1.3.1 黑白图像显示电路 \r\n 1.3.2 不同类型图像的显示原理 \r\n 1.3.3 调色板 \r\n 1.3.4 调色板原理 \r\n 1.3.5 电视图像采集卡 \r\n 1.3.6 图像数据的存储、传送和处理 \r\n 1.4 图像文件概述 \r\n 1.4.1 图像文件 \r\n 1.4.2 图像文件的结构 \r\n 1.4.3 图像文件的常用参数 \r\n 1.4.4 图像文件的类型 \r\n 1.4.5 图像显示与存储的过程\r\n 1.4.6 不同显示格式间像素数据的转换\r\n 1.5 BMP图像文件 \r\n 1.5.1 BMP文件的结构 \r\n 1.5.2 位图文件头与位图信息头 \r\n 1.5.3 主要参数\r\n 1.5.4 图像文件读入内存与显示 \r\n第2章 建立应用程序框架 \r\n 2.1 创建Visual C++.NET程序\r\n 2.1.1 新建Visual C++.NET项目 \r\n 2.1.2 选择应用程序类型 \r\n 2.2 建立菜单\r\n 2.2.1 添加菜单资源 \r\n 2.2.2 插入顶层菜单项 \r\n 2.2.3 添加菜单项 \r\n 2.2.4 添加命令处理函数 \r\n 2.3 鼠标与键盘事件的响应 \r\n 2.3.1 处理鼠标键消息 \r\n 2.3.2 捕获鼠标 \r\n 2.3.3 处理键盘消息 \r\n第3章 Visual C++图形编程 \r\n 3.1 设备环境类(CDC) \r\n 3.1.1 图形设备接口与设备环境 \r\n 3.1.2 MFC应用程序的绘制操作对象\r\n 3.1.3 映像模式和坐标系统 \r\n 3.1.4 在窗口用户区绘图 \r\n 3.1.5 设备环境的主要属性 \r\n 3.1.6 绘制图形演示程序 \r\n 3.2 画笔与线条图的绘制 \r\n 3.2.1 创建画笔 \r\n 3.2.2 线条图绘制函数 \r\n 3.2.3 线条绘制实例\r\n 3.3 画刷与区域填充 \r\n 3.3.1 创建画刷 \r\n 3.3.2 封闭曲线绘制函数 \r\n 3.3.3 区域填充实例 \r\n 3.4 字体与文本的显示 \r\n 3.4.1 创建字体 \r\n 3.4.2 库存字体 \r\n 3.4.3 文本绘制函数 \r\n 3.4.4 文本显示实例 \r\n 3.5 位图与位块的处理 \r\n 3.5.1 建立位图 \r\n 3.5.2 位块函数 \r\n 3.5.3 位块函数实例 \r\n第4章 图像的存取、显示与生成 \r\n 4.1 位图与CImage类 \r\n 4.1.1 位图 \r\n ……\r\n第5章 图像的变化 \r\n第6章 图像的点处理 \r\n第7章 图像的邻域处理 \r\n第8章 二值图像的处理 \r\n第9章 形态学图像处理\r\n第10章 彩色图像的处理 \r\n第11章 轮廓跟踪 \r\n第12章 线段编码 \r\n第13章 Clmage仿真类的建立 \r\n第14章 图像文件读写 \r\n参考文献 \r\n\r\n\r\n \r\n\r\n\r\n \r\n \r\n \r\n \r\n
前 言
本书是2005年年初出版的《C/C++图像处理编程》一书的姊妹书。在编写《C/C++图像处理编程》一书时我有一个观点,即图像的处理与编程环境无关。我原认为该书中的程序虽然是以C语言编写的,但是学好以后很容易移植到其他编程环境,譬如Visual C++中。现在我才认识到这个观点并不全面。虽然,它对于有较好编程基础的读者来说也许是正确的,但是对于那些一开始就学习C++编程的读者来说情况就不同了。C语言与C++尽管在语言结构上比较接近,但毕竟有一定的差异。对于初学者来说,阅读此书还有一定的困难,同时希望他们学完书中的编程原理后再应用到自己的工作中也不现实。因此,最好能有一本既可从中学到一些新的知识,又能花费较少精力就可拿来使用的图书。这样就萌发了为这些读者用C++再写一本书的念头,于是决定与我校从事多年C++教学工作的金登男副教授一起合作编写本书。
本书与《C/C++图像处理编程》在取材和编程方法方面基本相似,都是选择图像处理应用中最为常用的图像基础知识、图像增强与图像分析进行介绍,选材以便于编程实现并具有实用价值为标准。两者的差别在于后者主要是用C语言编写的,从原理出发一步一步编写自己的程序,除了底层少数基本子程序外基本上是“自给自足”的。而本书则是用C++编写的,并且在编程过程中尽量使用MFC中的现有函数。因此,本书内容不是《C/C++图像处理编程》一书的简单翻版。
实际上,Visual C++.NET与Visual C++在图形、图像的编程方面并没有实质性的差异。选择Visual C++.NET作为本书的编程环境有以下几方面的原因。
第一,Visual Studio.NET是一个集成了多种编程语言的开发环境,越来越多的读者以它作为学习编程和开发软件的工作平台,例如计算机专业的学生。在这个平台上,Visual C++.NET相对于其他编程语言来说变化不大,它延续了MFC用于创建Windows应用程序的强大功能,以及高效的性能和灵活的控制性,并且有了新的基于属性的编程功能。
第二,Visual C++.NET提供了多种常用图像文件格式(如BMP、TIF、GIF、JPEG与PNG等)的输入/输出模块。同时,ATL中的CImage类又极大地简化了图像数据的操作。
第三,通过创建Visual C++环境下的CImage仿真类,本书内容同样可以适用于VC++编程环境。
最后,也是很重要的一个原因—— 目前国内尚没有这方面的图书。虽然也有一些已经冠名Visual C++.NET图像处理编程或类似书名的图书,但是编程方法还是老的一套,没有跳出设备相关位图(DDB)与设备无关位图(DIB)概念的条框,编程方法比较复杂、繁琐、低效。
Visual C++.NET环境以CImage类为基础,Visual C++环境则以Win32中新的位图结构DIBSECTION为基础,只用了CreateDIBSection、GetDIBColor-Table、SetDIBColorTable与BitBlt等4个Windows GDI函数就实现了图像的读入、显示与存储,并创建了CImage仿真类,完全跳出了DDB、DIB概念的条框,使得处理方法返朴归真、大为简化。在图像文件的读写、调色板数据的存取等方面效果尤为明显。
本书内容可分4个部分,第1部分(第1章)为图像基础知识,介绍了颜色模式,图像显示原理和图像文件的结构;第2部分(第2~5章)为图像编程初步,介绍了Visual C++.NET应用程序框架的建立,图形编程,图像的存取、显示与生成,以及图像的变化;第3部分(第6~12章)为图像处理编程,介绍了图像的点处理,邻域处理,二值图像的处理,形态学图像处理,彩色图像的处理,轮廓跟踪与线段编码;第4部分(第13和第14章)为Visual C++图像编程,介绍了CImage仿真类的建立与图像文件的读写。
以Visual C++.NET为编程环境的读者只需阅读本书的前12章,对图像文件感兴趣时再阅读第13和第14章。以Visual C++为编程环境的读者可在读完第1章之后插入阅读第13、14章,然后再回来接着阅读第3章开始的内容。
本书演示程序层次分明,上层是窗口与菜单事件的响应程序,中间层以CImage类表示图像,底层则采用C语言的二维数组结构表示图像。三者中,后者由于采用C语言的基本数据结构,在各种编程环境(C、C++)下都可以使用。
随书光盘提供了演示程序的源代码以及处理所需的图像实例。第3~5章的演示程序名为IProcessP,第6~12章的演示程序名为IProcessN,第13和第14章的演示程序名为ImageShow。其中,前面两个演示程序是在VC++.NET环境下编制的,与它们对应的Visual C++版本演示程序名分别为ImageP与ImageN,两种版本程序的创建过程有所不同,但程序代码基本相同,而在功能上则完全一样。ImageShow则是在Visual C++环境下编制的,是图像文件的输入/输出模块,支持BMP、TIF、GIF、PCX、TGA与JPEG等6种常用图像文件格式。它是编制ImageP与ImageN程序的基础。这些演示程序可以作为初学者编写程序的基础。
本书可作为计算机及相关专业数字图像处理的教材或教学参考书使用,也可作为电子、信息类专业的学生与科研人员在图像处理方面的参考书或程序库。
由于本书侧重图像处理编程知识的介绍,对于图像处理理论的介绍只能是初步的,无法做到全面、完整,若需要进一步研究,请参阅有关数字图像处理的图书。
限于篇幅,对于Visual C++.NET与Visual C++编程方面的专门知识本书只能略作介绍,不可能十分详尽,如需作进一步的了解,请参阅相关编程图书。
本书第2部分(第2~5章)由金登男编写,其余章节由陆宗骐编写。
演示程序中的菌丝图像及相关处理方法选自我的学生陈芳的硕士学位论文。
本书的编写再次得到华东理工大学教材立项的资助,对于学校教务部门的关心和支持在此深表谢意。
最后,对于清华大学出版社第五事业部策划部主任、本书的组稿编辑胡伟卷同志在出版过程中的支持和帮助表示由衷的感谢。
陆宗骐
无封面