Read and Write Image in C Programming
#include <stdio.h>
#include<math.h>
#define ROW 609
#define COL 343
int row,col,maxgray;
int in_image [ROW][COL];
int out_image [ROW][COL];
int read(char *filename)
{
int i,j,nl=0;
char ch;
FILE *fp;
fp=fopen(filename,"rb");
// Extracting Header information
while (nl<2)
{
fscanf(fp, "%c",&ch);
if (ch=='\n')
nl++;
}
fscanf(fp,"%d%d%d",&col,&row,&maxgray);
// Reading data from file
for(i=0; i<row; i++)
{
for (j=0; j<col; j++)
{
fscanf (fp, "%d", &in_image[i][j]);
}
}
fclose(fp);
}
int write(char *filename)
{
int i,j,nl=0;
char ch;
FILE *fp;
fp=fopen(filename,"wb");
// Writing header into fp
fprintf (fp,"%s\n%s\n%d %d\n%d\n",
"P2","# Created By Mostafiz",col,row,255);
//Putting data into another file
for (i=0; i<row; i++)
{
for (j=0; j<col; j++)
{
fprintf(fp, "%d ", out_image[i][j]);
}
fprintf (fp,"%s","\n");
}
fclose(fp);
}
int main()
{
int i,j;
double gamma = .025;
int c = 1;
double s,r;
read("rose.pgm");
///Processing the image
for (i=0; i<row; i++)
{
for (j=0; j<col; j++)
{
out_image[i][j]=in_image[i][j];
if(out_image[i][j]>=180)
{
out_image[i][j]=255;
}
else if(out_image[i][j]<180 && out_image[i][j]>=100)
{
r=(double)(in_image[i][j]/255);
s=c*(pow(r,gamma));
out_image[i][j]=(int)(255*s);
//out_image[i][j]=(int)(in_image[i][j]*s);
//printf("%d",out_image[i][j]);
}
else
{
out_image[i][j]=0;
}
}
}
write("rosePowerLaw(025).pgm");
return 0;
}
Comments
Post a Comment