《图像增强 直方图均衡化处理C语言实现》由会员分享,可在线阅读,更多相关《图像增强 直方图均衡化处理C语言实现(22页珍藏版)》请在金锄头文库上搜索。
1、图像增强 直方图均衡化 处理C 语言实现#ifndef BMP_H_3_INCLUDED#define BMP_H_3_INCLUDED typedef unsigned short WORD;typedef unsigned long DWORD;typedef long LONG;typedef unsigned char BYTE;typedef struct tagBITMAPFILEHEADER/bmfh WORD bfType;DWORD bfSize;WORD bfReserved1;WORD bfReserved2;DWORD bfOffBits;BITMAPFILEHEADE
2、R;typedef struct tagBITMAPINFOHEADER/bmih DWORD biSize;LONG biWidth;LONG biHeight;WORD biPlanes;WORD biBitCount;DWORD biCompression;DWORD biSizeImage;LONG biXPelsPerMeter;LONG biYPelsPerMeter;DWORD biClrUsed;DWORD biClrImportant;BITMAPINFOHEADER;typedef struct tagRGBQUAD/rgbq BYTE rgbBlue;BYTE rgbGr
3、een;BYTE rgbRed;BYTE rgbReserved;RGBQUAD;typedef struct tagBITMAPINFOBITMAPINFOHEADER bmiHeader;RGBQUAD bmiColors1;BITMAPINFO;#endif/BMP_H_3_INCLUDED#include stdio.h#include stdlib.h#include string.h#include malloc.h#include ctype.h#include process.h#includeBMP_3.hBITMAPFILEHEADER bmfh;BITMAPINFOHEA
4、DER bmih;BYTE*imgData;int N;void readData();void HistTrans();int ReadFileHeader(BITMAPFILEHEADER*);int ReadInfoHeader(BITMAPINFOHEADER*);int CreatePalette(RGBQUAD);int ReadPixelData(BYTE*);LONG GetLineBytes(int,int);int SaveAsImage(char*);int main()char saveasfilepath256;int i;DWORD dwLineBytes;read
5、Data();dwLineBytes=GetLineBytes(bmih.biWidth,bmih.biBitCount);N=(int)dwLineBytes*bmih.biHeight;HistTrans();printf(Save as another path(ex.d:/poon.bmp)n);scanf(%s,saveasfilepath);i=SaveAsImage(saveasfilepath);if(i=-1)printf(Error:failed to save the image.n);return 0;void readData()int i,k,h;DWORD dwL
6、ineBytes;i=ReadFileHeader(&bmfh);if(i=0)printf(Read file header successful!n);k=ReadInfoHeader(&bmih);if(k=0)printf(Read info header successful!n);dwLineBytes=GetLineBytes(bmih.biWidth,bmih.biBitCount);imgData=(BYTE*)malloc(dwLineBytes*bmih.biHeight*sizeof(BYTE);h=ReadPixelData(imgData);if(h=0)print
7、f(Read pixel data successful!n);if(i=0&k=0&h=0)printf(Read datas successful!n);void HistTrans()int i,j,k;int count256;double SHisPixels256;int*Pixels;FILE*fp;Pixels=(int*)malloc(256*N*sizeof(int);for(i=0;i 256;i+)counti=0;SHisPixelsi=0.0;for(i=0;i 256*N;i+)Pixelsi=0;for(i=0;i N;i+)countimgDatai+;for
8、(i=0;i 256;i+)k=0;for(j=0;j N;j+)if(imgDataj=i)Pixelsi*256+k=j;k+;SHisPixels0=(double)count0/N);for(i=1;i 256;i+)SHisPixelsi=SHisPixelsi-1+(double)counti/N);for(i=0;i 256;i+)for(j=0;j counti;j+)imgDataPixelsi*256+j=int(SHisPixelsi*255+0.5);int ReadFileHeader(BITMAPFILEHEADER*bmfh)FILE*dataFile;dataF
9、ile=fopen(shuaige.bmp,r);if(fread(&bmfh-bfType,sizeof(WORD),1,dataFile)!=1)printf(Can not read bfType in the file header.n);fclose(dataFile);return-1;if(fread(&bmfh-bfSize,sizeof(DWORD),1,dataFile)!=1)printf(Can not read bfSize in the file header.n);fclose(dataFile);return-1;if(fread(&bmfh-bfReserve
10、d1,sizeof(WORD),1,dataFile)!=1)printf(Can not read bfReserved1 in the file header.n);fclose(dataFile);return-1;if(fread(&bmfh-bfReserved2,sizeof(WORD),1,dataFile)!=1)printf(Can not read bfReserved2 in the file header.n);fclose(dataFile);return-1;if(fread(&bmfh-bfOffBits,sizeof(DWORD),1,dataFile)!=1)
11、printf(Can not read bfOffBits in the file header.n);fclose(dataFile);return-1;fclose(dataFile);return 0;int ReadInfoHeader(BITMAPINFOHEADER*bmih)FILE*dataFile;dataFile=fopen(shuaige.bmp,r);fseek(dataFile,14,SEEK_SET);if(fread(&bmih-biSize,sizeof(DWORD),1,dataFile)!=1)printf(Can not read biSize in th
12、e info header.n);fclose(dataFile);return-1;if(fread(&bmih-biWidth,sizeof(LONG),1,dataFile)!=1)printf(Can not read biWidth in the info header.n);fclose(dataFile);return-1;if(fread(&bmih-biHeight,sizeof(LONG),1,dataFile)!=1)printf(Can not read biHeight in the info header.n);fclose(dataFile);return-1;i
13、f(fread(&bmih-biPlanes,sizeof(WORD),1,dataFile)!=1)printf(Can not read biPlanes in the info header.n);fclose(dataFile);return-1;if(fread(&bmih-biBitCount,sizeof(WORD),1,dataFile)!=1)printf(Can not read biBitCount in the info header.n);fclose(dataFile);return-1;if(fread(&bmih-biCompression,sizeof(DWO
14、RD),1,dataFile)!=1)printf(Can not read biCompression in the info header.n);fclose(dataFile);return-1;if(fread(&bmih-biSizeImage,sizeof(DWORD),1,dataFile)!=1)printf(Can not read biSizeImage in the info header.n);fclose(dataFile);return-1;if(fread(&bmih-biXPelsPerMeter,sizeof(LONG),1,dataFile)!=1)prin
15、tf(Can not read biXPelsPerMeter in the info header.n);fclose(dataFile);return-1;if(fread(&bmih-biYPelsPerMeter,sizeof(LONG),1,dataFile)!=1)printf(Can not read biYPelsPerMeter in the info header.n);fclose(dataFile);return-1;if(fread(&bmih-biClrUsed,sizeof(DWORD),1,dataFile)!=1)printf(Can not read biClrUsed in the info header.n);fclose(dataFile);return-1;if(fread(&bmih-biClrImportant,sizeof(DWORD),1,dataFile)!=1)printf(Can not read biClrImportant in the info header.n);fclose(dataFile);return-1;fclose(dataFile);return 0;int Cre