본문 바로가기

memo

[공부중]히스토그램

#include<stdio.h>

#include<stdlib.h>

#include<math.h>


#define height 256

#define width 256


typedef unsigned char BYTE;



void main()

{

int hist[256] = {0};

float sum_hist[256] = {0} ;  // 초기화안해주면 값미묘하게 다름 꼭꼭. 

int sum = 0;

FILE *F_I = fopen("불러올이미지","rb");

FILE *F_O = fopen("출력될이미지","wb");


BYTE* Me = new BYTE [height*width];

BYTE* MeOut = new BYTE [height*width];


fread(Me, sizeof(BYTE), height*width, F_I);



float result = 255.0f/(float)(width*height)  ;


for ( int i = 0; i<height ; i++)

{

for(int j = 0; j<width; j++)

{

hist[Me[i*width+j]]++;

}

}


//반올림

for(int i = 0; i<256; i++)

{

sum += hist[i];

sum_hist[i] = (int)((sum*result)+0.5);


}


for(int i = 0; i<height; i++)

{

for(int j = 0; j<width; j++)

{

MeOut[i*width+j] = sum_hist[Me[i*width+j]];

}

}

fwrite(MeOut,sizeof(BYTE),height*width, F_O);


delete Me;

delete MeOut;


fclose(F_I);

fclose(F_O);

}