《图象处理和分析实验说明书.pdf》由会员分享,可在线阅读,更多相关《图象处理和分析实验说明书.pdf(6页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、课程实验 1 一、实验目的 熟悉*.bmp 位图文件的文件格式,掌握位图数据读取并在屏幕上显示的方法。二、实验环境 12 人一台 pc 机,Visual C+6.0 编程环境。三、实验内容 读取指定的 256 色灰度图像的数据,显示该文件的文件头和信息头数据的值,并在屏幕上显示该图象。四、实验步骤 1 进入 Visual C+6.0 编程环境,点击“File“New,选择 project 标签页,按照图 1 所示选择新建工程的类型和名字,点击 ok 确定。图 1 2 出现图 2 所示对话框,按照图 2 进行应用程序类型选择,并点击 Finish 确定。在随后出现的对话框中点击 ok 确定,系统
2、就按照我们的要求自动生成了一个名为“ShowBmp的工程。3 在 stdafx.h 头文件中添加如下的代码:#include /MFC core and standard components#include /MFC extensions#include /MFC Automation classes#include /MFC support for Internet Explorer 4 Common Controls#include /*For _MAX_PATH definition*/#include /输入输出函数库#include /内存分配函数库#include /数学相关函数
3、库 图 2 4 翻开 ShowBmp.cpp 文件,在主函数 main 之前添加如下代码:BITMAPFILEHEADER bmfHeader;/位图文件头 BITMAPINFOHEADER bmiHeader;/位图信息头 RGBQUAD*bmiColor;/调色板指针 unsigned char MyImage10241024;/为二维图像的颜色数据分配一个二维数组 5 将主函数写为如下形式:void main(int argc,char*argv)if(argc2)printf(输入命令格式:ShowBmp.exe*.bmpn);return;FILE*fp;int Palette_Nu
4、m;int Height,Width,Width_4;int i,j;DWORD Color_Value;fp=fopen(argv1,rb);/翻开*.bmp文件,获取文件指针 fread(&bmfHeader,sizeof(bmfHeader),1,fp);/从文件中读位图文件头数据到bmfHeader变量 fread(&bmiHeader,sizeof(bmiHeader),1,fp);/从文件中读位图信息头数据到bmiHeader变量 /判断是否是DIB对象,检查头两个字节是否是BM if(bmfHeader.bfType!=0 x4D42)printf(这不是一个位图文件n);ret
5、urn;/判断位图的颜色是否是256色 if(bmiHeader.biBitCount!=8)printf(本程序只能显示256色灰度图n);return;Height=bmiHeader.biHeight;/从信息头中读出图像高度 Width =bmiHeader.biWidth;/从信息头中读出图像宽度 Width_4=(Width+3)/4*4;/取一个大于等于Width,并且最接近Width的4的整数倍的数值 printf(%s图像文件的文件头数据如下n,argv1);printf(bfType=BMn bfSize=%dn bfReserved1=%dn bfReserved2=%d
6、n bfoffBits=%dn,bmfHeader.bfSize,bmfHeader.bfReserved1,bmfHeader.bfReserved2,bmfHeader.bfOffBits);printf(%s图像文件的信息头数据如下n,argv1);printf(biSize=%dn biWidth=%dn biHeight=%dn biPlanes=%dn biBitCount=%dn biCompress=%dn biSizeImage=%dn biXPeIsPerMeter=%dn biYPeIsPerMeter=%dn biCIrUsed=%dn biClrImprotant=%
7、dn,bmiHeader.biSize,bmiHeader.biWidth,bmiHeader.biHeight,bmiHeader.biPlanes,bmiHeader.biBitCount,bmiHeader.biCompression,bmiHeader.biSizeImage,bmiHeader.biXPelsPerMeter,bmiHeader.biYPelsPerMeter,bmiHeader.biClrUsed,bmiHeader.biClrImportant);/获取调色板的成员数目,也就是位图所用到的颜色个数 if(bmiHeader.biClrUsed=0)Palette_
8、Num=1bmiHeader.biBitCount;else Palette_Num=bmiHeader.biClrUsed;bmiColor=(RGBQUAD*)malloc(Palette_Num*sizeof(RGBQUAD);/为调色板指针指向的地址分配一块内存空间 fread(bmiColor,sizeof(RGBQUAD),Palette_Num,fp);/从文件中读位图的调色板数据到bmiColor指针指向的缓冲区 fseek(fp,bmfHeader.bfOffBits,0);/令文件指针指向位图有效数据的起始位置 /将位图有效数据输入导入MyImage二维数组中 for(i=
9、0;iHeight;i+)fread(MyImageHeight-1-i,sizeof(unsigned char),Width_4,fp);fclose(fp);/关闭位图文件 for(i=0;iHeight;i+)for(j=0;jWidth_4;j+)MyImageij=bmiColorMyImageij.rgbRed;/根据颜色索引号从调色板中查找真正的颜色值,赋给MyImage数组的元素 free(bmiColor);HDC hMyDc=GetDC(NULL);/获取显示屏的指针 /将MyImage二维数组所存储的图像数据显示在屏幕上 for(i=0;iHeight;i+)for(j
10、=0;jWidth_4;j+)Color_Value=MyImageij;Color_Value=Color_Value*65536+Color_Value*256+Color_Value;SetPixel(hMyDc,j,i,Color_Value);return;6 依次点击菜单“Build下面的“Compile 和“Rebuild All菜单项,在 Debug 文件夹中生成可执行程序 ShowBmp.exe。将该文件复制到 E:盘根目录下,并将实验图片也全部复制到根目录下。在 dos 命令提示符界面中,进入到 E:盘根目录下,然后输入如图 3 所示的命令,回车确定。7 将图 3 所示的命令中的文件名换成其他的位图文件名,分别显示这些位图。图 3 五、实验结果 在屏幕的左上方,显示实验图片,并且在命令提示符界面中显示出了该位图文件的文件头数据和信息头数据。如图 4 所示。六、思考题*.bmp 位图文件由哪几局部组成?它们的名称和包括的数据含义是什么?图 4