#include "windows.h"
#include <iostream>
#include <fstream>
#include <string.h>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
using namespace std;
#define WIDTHBYTES(i) ((i+31)/32*4)
void main(){
system("color 0B");
HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
BITMAPFILEHEADER bitHead;
BITMAPINFOHEADER bitInfoHead;
FILE* pfile;
char strFile[50];
printf("\n 直方图均衡");
printf("\n\n 图片文件地址:");
scanf("%s",strFile); //读取图文件地址
pfile = fopen(strFile,"rb");
if(pfile!=NULL)
{
printf("\n file open success.\n");
fread(&bitHead,1,sizeof(tagBITMAPFILEHEADER),pfile);
fread(&bitInfoHead,1,sizeof(BITMAPINFOHEADER),pfile);
}
else
{
printf("\n file open fail!\n");
return;
}
RGBQUAD *pRgb ;
long nPlantNum;
if(bitInfoHead.biBitCount < 24)
{
nPlantNum = long(pow(2,double(bitInfoHead.biBitCount)));
pRgb=(tagRGBQUAD *)malloc(nPlantNum*sizeof(tagRGBQUAD));
memset(pRgb,0,nPlantNum*sizeof(RGBQUAD));
int num = fread(pRgb,4,nPlantNum,pfile);
}
int width = bitInfoHead.biWidth;
int height = bitInfoHead.biHeight;
int l_width = WIDTHBYTES(width * bitInfoHead.biBitCount);
BYTE *pColorData=(BYTE *)malloc(height*l_width);
memset(pColorData,0,height*l_width);
long nData = height*l_width;
fread(pColorData,1,nData,pfile);
int i;
int j;
int H[256];
for (i = 0;i<256;i++)
H[i] = 0;
for(i = 0;i<nData;pColorData++,i++) //得到原直方图
H[(int)*pColorData]++;
char FileName1[50] = {'O','l','d','.','x','l','s'};
FILE *fp;
fp = fopen(FileName1,"wb");
if(fp==NULL)
return;
for(i = 0;i<256;i++) //保存原直方图
fprintf(fp,"%d \r\n",H[i]);
fclose(fp);
double P[256];
for (i = 0;i<256;i++)
P[i] = 0;
for(i = 0;i<256;i++)
{
P[i] = (double)H[i]/nData;
}
double S[256];
for (i = 0;i<256;i++)
S[i] = 0;
for (i = 0;i<256;i++) //均衡化
{
for (j = 0;j<=i;j++)
S[i]+=P[j];
S[i] = S[i] * 255;
}
for(i = nData-1;i>=0;pColorData--,i--)
for (j = 0;j<256;j++)
if ((int)*pColorData == j)
{
*pColorData = S[j];
break;
}
char strFile2[50] = {'N','E','W','.','b','m','p'};
FILE* pfile2; //新图文件
pfile2 = fopen(strFile2,"wb");
fwrite(&bitHead,1,sizeof(tagBITMAPFILEHEADER),pfile2);
fwrite(&bitInfoHead,1,sizeof(BITMAPINFOHEADER),pfile2);
fwrite(pRgb,4,nPlantNum,pfile2);
fwrite(pColorData,1,nData,pfile2);
fclose(pfile2);
int H2[256];
for (i = 0;i<256;i++)
H2[i] = 0;
for(i = 0;i<nData;pColorData++,i++) //得到新直方图
H2[(int)*pColorData]++;
char FileName2[50] = {'N','e','w','.','x','l','s'};
FILE *fp2;
fp2 = fopen(FileName2,"wb");
if(fp2==NULL)
return;
for(i = 0;i<256;i++) //保存新直方图
fprintf(fp2,"%d \r\n",H2[i]);
fclose(fp2);
printf("\n 已生成");
SetConsoleTextAttribute(handle, FOREGROUND_INTENSITY | FOREGROUND_GREEN);
printf("NEW.bmp");
SetConsoleTextAttribute(handle, FOREGROUND_INTENSITY | FOREGROUND_GREEN | FOREGROUND_BLUE);
printf("文件");
printf("\n 已生成");
SetConsoleTextAttribute(handle, FOREGROUND_INTENSITY | FOREGROUND_GREEN);
printf("New.xls");
SetConsoleTextAttribute(handle, FOREGROUND_INTENSITY | FOREGROUND_GREEN | FOREGROUND_BLUE);
printf("文件\n\n");
system("pause");
}
Zhi-Fang-Tu-Jun-Heng.zip_tu_zhifangjunheng
版权申诉
176 浏览量
2022-09-23
16:54:19
上传
评论
收藏 10.5MB ZIP 举报
JonSco
- 粉丝: 66
- 资源: 1万+