《数字图像处理》实验报告专业:软件工程姓名:王鹏飞学号:S201961551指导老师:王素玉2019年12月28日信息学部软件学院目录实验一、BMP文件的读写.............................................................................................11实验目的与实验内容.........................................................................................12实验原理.............................................................................................................13实验关键代码.....................................................................................................14实验运行结果.....................................................................................................35总结.....................................................................................................................4实验二、图像缩放........................................................................................................41实验目的及内容.................................................................................................42实验原理.............................................................................................................53实验关键代码和运行结果.................................................................................64结果分析.............................................................................................................8实验三、直方图均衡....................................................................................................91实验目的及内容.................................................................................................92实验原理.............................................................................................................93实验关键代码和实验结果...............................................................................104思考题...............................................................................................................115结果分析............................................................................................................12实验四、图像滤波......................................................................................................121实验目的及内容...............................................................................................122图像滤波的原理...............................................................................................123实验关键代码及结果.......................................................................................13实验五、图像的灰度映射..........................................................................................171实验目的及内容...............................................................................................172实验关键代码及结果.......................................................................................173不同参数的变换结果.......................................................................................20附录一..........................................................................................................................171实验要求:用c/c++语言编程实现以下功能实验环境:Windows10开发工具:CodeBlocks实验一、BMP文件的读写1实验目的与实验内容1.1灰度BMP图像的读写:(1)读入lena.bmp文件;(2)通过文件内容得出文件大小,位图数据起始字节,图像长、宽以及每像素的位数等信息;(3)提取出原图像中的位图数据,另存为lena.raw,并通过photoshop打开该文件,查看所读取的数据。(4)仅取原始图像左上角1/4的数据,另存一个lenas.bmp图像,在photoshop中打开查看效果。1.2彩色BMP图像读写(1)读入文件lena_C.bmp文件;(2)通过文件内容得出文件大小,位图数据起始字节,图像长、宽以及每像素的位数等信息;(3)提取出原图像中的位图数据,另存为lena_C.raw,并通过photoshop打开该文件,查看所读取的数据。(4)仅取原始图像左上角1/4的数据,另存一个lena_Cs.bmp图像,在photoshop中打开查看效果。2实验原理通过C语言读取BMP文件,读入图像的文件指针、宽、高、颜色表、图像类型、每像素位数。BMP文件的数据按照从头文件开始的顺序分为BMP头、位图信息头、调色板、位图数据。3实验关键代码源代码如下://申请位图文件头结构变量,填写文件头信息BITMAPFILEHEADERfileHead;fileHead.bfType=0x4D42;//bmp类型//bfSize是图像文件4个组成部分之和2fileHead.bfSize=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+colorTablesize+lineByte*height;fileHead.bfReserved1=0;fileHead.bfReserved2=0;//bfOffBits是图像文件前3个部分所需空间之和fileHead.bfOffBits=54+colorTablesize;//写文件头进文件fwrite(&fileHead,sizeof(BITMAPFILEHEADER),1,fp2);//申请位图信息头结构变量,填写信息7头信息BITMAPINFOHEADERhead;head.biBitCount=biBitCount;head.biClrImportant=0;head.biClrUsed=0;head.biCompression=0;head.biHeight=height;head.biPlanes=1;head.biSize=40;head.biSizeImage=lineByte*height;head.biWidth=width;head.biXPelsPerMeter=0;head.biYPelsPerMeter=0;//写位图信息头进内存fwrite(&head,sizeof(BITMAPINFOHEADER),1,fp2);//如果灰度图像,有颜色表,写入文件RGBQUAD*pColorTable1;if(biBitCount==8){pColorTable1=newRGBQUAD[256];fread(pColorTable1,sizeof(RGBQUAD),256,fp1);}if(biBitCount==8)fwrite(pColorTable1,sizeof(RGBQUAD),256,fp2);//写位图数据进文件inty=(biWidth*biBitCount/8+3)/4*4;fseek(fp1,-y*biHeight/2,2);longq;if((q=ftell(fp1))==-1L){puts(GetBitmapHeader读取文件指针位置失败!);return0;}elseprintf(起始字节:%d\n,q);pBmpBuf1=newunsignedchar[lineByte*biHeight];printf(helloworld1);3intt;for(t=0;tbiHeight/2;t++){fread(pBmpBuf1,1,y/2,fp1);fseek(fp1,y/2,1);fwrite(pBmpBuf1,y/2,1,fp2);}fclose(fp2);fclose(fp1);return1;}4实验运行结果(1)灰度图像运行结果灰度图lena.bmp文件lenas.bmp文件由运行结果可知该灰度图的大小为263224字节,长和宽都为512字节,每个像素的位数为8位,位图数据起始字节为132152字节。(2)彩色图像运行结果4lena_C.bmp文件lena_Cs.bmp文件由运行结果可知,该彩色图像的大小为786486字节,长和宽均为512字节,每个像素的位数为24位,位图数据起始字节为393270字节。5总结通过本次实验,学会了如何读取BMP图像中的信息,尤其是BMP中的信息变量设置较多,这点存在很大的难度。实验二、图像缩放1实验目的及内容2.1灰度图像最近邻缩放:(1)读入lena.bmp文件;(2)采用最近邻方法将原