数字图像处理实验教程 V3.1
青岛科技大学
数字图像处理实验教程
信息学院 张淑军 版本:V3.1
2011年3月试行 2012-2014年修订
1
数字图像处理实验教程 V3.1
编写说明
1. 本书是《数字图像处理》实验教程,配合理论授课内容,巩固所学知识,锻炼学生动手开发能力。 2. 实验课需要学生预习,做好必要的准备,以保证实验效果。每次实验的内容和目标非常明确,实验过程中请同学们认真动手,举一反三,不依赖例程,能掌握编程思想。 3. 为加强学生对于所掌握内容的理解,设计了实验回答问题,环环相扣,使学生在编程实践的同时巩固知识点,对所学知识融会贯通,为进入本次实验内容打下基础。 4. 每次实验由例程和练习两部分组成,例程包含了本次实验的核心内容,要求学生统一掌握。练习部分考虑了学生编程水平的高低,分为:基础练习;扩展练习;高层进阶三个层次,以激励编程好的学生积极主动往更高层次努力,培养、选拔优秀学生;大多数的学生可以完成扩展练习。 5. 每课内容最后罗列了所用到的基本OPENCV函数,方便学生查找使用。未附说明的函数请学生自行查找OPENCV电子书,锻炼自己解决问题的能力。 6. 每次实验完成之后,请学生按要求撰写实验报告,并在最后详细记录“实验收获与总结”,将实验中遇到的问题和解决过程作为经验教训记录下来,训练学生及时总结归纳和反思、记录的习惯。
2
数字图像处理实验教程 V3.1
目 录
目 录 ................................................................................................................................................ 3 实验1 图像文件读入和显示(验证性,第1章) .................................................................... 4 实验2 图像采集与显示(综合性,第2章) .......................................................................... 16 实验3 图像坐标变换(综合性,第2章) .............................................................................. 20 实验4 图像灰度变换(综合性,3.1节) ............................................................................... 25 实验5 直方图均衡化(验证性,3.3节) ............................................................................... 28 实验6 滤波器设计(综合性,3.4节) ................................................................................... 34 实验7 颜色空间转换(综合性,第4章) .............................................................................. 41 实验8 图像傅里叶变换(验证性,第5章) .......................................................................... 47 拓展实验 基于MFC的图像处理程序设计(综合性) ............................................................. 53 参考文献......................................................................................................................................... 53
3
数字图像处理实验教程 V3.1
实验1 图像文件读入和显示(验证性,第1章)
1. 实验目的
(1) 熟悉VC++6.0开发环境。
(2) 了解OpenCV开发库,学会在VC++6.0环境下安装和配置OpenCV。 (3) 掌握开源库的通用安装和配置方法。
(4) 通过运行一个简单的程序,初步了解OpenCV程序的特点。 2. 实验内容
(1) 编写程序掌握OpenCV加载及显示图像的方法。 (2) 查看图像的属性(包括类型、大小、分辨率等),掌握图像的采样和量化、
像素间的联系。
3. 实验步骤(验证性实验)
(1) 检查所用的计算机系统是否已安装了VC++6.0(中英文版本均可)。 (2) 安装OpenCV 1.0并正确配置,配置文档见“9.OpenCV配置文档”。 (3) 创建OpenCV控制台项目。 方法1:新建文件
①在VC6.0下新建一个C++源文件:File->New->Files-> C++ Source File,取名为hello.cpp,指定存储目录。
②在hello.cpp的编辑页面键入hello.cpp所给的代码,并保存。 ③编译、连接,创建所需的工作区,在Debug目录下得到可执行文件hello.exe。 方法2:新建工程
①在VC6.0下创建一个空的控制台项目(Win32 Console Application),取名为hello,指定存储目录。
②给该项目添加(新建)一个C源代码文件(C++ Source File),取名为hello.cpp。键入所给的代码。
③编译、连接该程序,在Debug目录下得到可执行文件hello.exe。 (4) 在工程目录下放入图像文件lena.jpg,运行该项目,得到输出结果。 (5) 按照上述(1)(-3)步骤重新建立一个新的工程hello2.dsw,键入hello2.cpp
的相关代码,编译、连接,调试参数,得到运行结果。
控制台程序有两种方法运行:
①以命令行方式运行:在cmd命令行窗口(开始->运行->打开,cmd->确定,进入命令行窗口)中找到hello.exe所在的文件夹,输入hello.exe lena.jpg(要求lena.jpg与编译连接好的hello.exe在同一个目录下),运行。
②指定输入参数:在项目配置页依次找Project->Settings->Debug->Program arguments,在其中直接输入程序要求的外部输入参数lena.jpg,运行该程序。(要求lena.jpg与工程文件在同一个目录下。)
为更好地理解控制台程序输入参数的问题,请将程序hello.cpp与程序hello2.cpp做仔细的对比,认真体会。
二者的区别在于,hello2.cpp中的main函数带有两个参数,argc和argv,如下面形式: int main(int argc, char** argv) 或 int main(int argc, char* argv[])
这两个参数的作用是:argc 是指命令行输入参数的个数,argv存储了所有的命令行参数。假如程序是hello.exe,如果在命令行运行该程序,运行命令为:hello.exe lena.jpg,则:
4
数字图像处理实验教程 V3.1
argc的值是 2,argv[0]是\,argv[1]是\。
(6) 修改hello2程序,使其可以同时读取、显示多幅图像。 4. 实验回答问题
(1) 什么是OpenCV?
OpenCV的全称是:Open Source Computer Vision Library 。OpenCV是一个基于BSD许可证授权(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows和Mac OS操作系统上。它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。
(2) 通过实验,查看IplImage结构体的数据结构。请给出IplImage结构体
的数据结构。
nt nSize; /* IplImage大小 */ int ID; /* 版本 (=0)*/
int nChannels; /* 大多数OPENCV函数支持1,2,3 或 4 个通道 */ int alphaChannel; /* 被OpenCV忽略 */ int depth; /* 像素的位深度
char colorModel[4]; /* 被OpenCV忽略 */ char channelSeq[4]; /* 同上 */
int dataOrder; /* 0 - 交叉存取颜色通道, 1 - 分开的颜色通道. */ int origin; /* 0 - 顶—左结构, 1 - 底—左结构
int align; /* 图像行排列 (4 or 8). OpenCV 忽略它,使用 widthStep 代替 */ int width; /* 图像宽像素数 */ int height; /* 图像高像素数*/
struct _IplROI *roi;/* 图像感兴趣区域. 当该值非空只对该区域进行处理 */ struct _IplImage *maskROI; /* 在 OpenCV中必须置NULL */ void *imageId; /* 同上*/
struct _IplTileInfo *tileInfo; /*同上*/
int imageSize; /* 图像数据大小(在交叉存取格式下imageSize=image->height*image->widthStep),单位字节*/ char *imageData; /* 指向排列的图像数据 */
int widthStep; /* 排列的图像行大小,以字节为单位 */ int BorderMode[4]; /* 边际结束模式, 被OpenCV忽略 */ int BorderConst[4]; /* 同上 */
char *imageDataOrigin; /* 指针指向一个不同的图像数据结构(不是必须排列的),是为了纠正图像内存分配准备的 */
(3) 请说明OpenCV配置过程中,各个步骤的意义。
配置VC++6.0环境
下面需要设置VC6.0环境,使得VC6.0在编译OpenCV程序时,能够知道从何处找到头文件和库文件。 (1)配置头文件目录
依次打开Tools->Options->Directories: 在
Include files中,添加如下目录(6个,通常用前面的4个即可): (2)配置库文件目录
5
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库数字图像处理实验教程-V3.1-zsj在线全文阅读。
相关推荐: