raw画像を読み込み、ヒストグラムを伸張化して出力するプログラムについて。
Posted: 2012年11月04日(日) 22:41
まだ初心者ですが、よろしくおねがいします。
raw画像を読み込み、ヒストグラムを伸張化して画像を出力するプログラムを作成しています。
コンパイルは通ったのですが、実行をすると、前回と同じく「問題が発生したため、プログラムが正しく動作しなくなりました。」と表示され、実行が止まってしまいました。
プログラムが重たいのでしょうが、これをどのようにしたら改善できるのかわかりません。
アドバイスを頂けるとうれしいです。
よろしくご教示ください。
raw画像を読み込み、ヒストグラムを伸張化して画像を出力するプログラムを作成しています。
コンパイルは通ったのですが、実行をすると、前回と同じく「問題が発生したため、プログラムが正しく動作しなくなりました。」と表示され、実行が止まってしまいました。
プログラムが重たいのでしょうが、これをどのようにしたら改善できるのかわかりません。
アドバイスを頂けるとうれしいです。
よろしくご教示ください。
#include<stdio.h>
#include<stdlib.h>
int main(void)
{
FILE *fp1,*fp2,*fphist1,*fphist2;
static unsigned char buf[1600*1600]; //入力画像
static unsigned char buf2[1600*1600]; //出力画像
int i,j; //ループ変数
int c;
//ヒストグラム伸張化に使用する値
int a=88; //最小値
int b=160; //最大値
//ヒストグラムを代入する配列の初期化
int histogram[256]={0};
int histogram2[256]={0};
//各ファイルオープン
if((fp1=fopen("Landsat1.gray","rb"))==NULL){
printf("file open error\n");
return 1;
}
if((fp2=fopen("OutSample2.gray","wb"))==NULL){
printf("file open error\n");
return 1;
}
if((fphist1=fopen("hist1.txt","w"))==NULL){
printf("file open error\n");
return 1;
}
if((fphist1=fopen("hist2.txt","w"))==NULL){
printf("file open error\n");
return 1;
}
//画像の読み込み
for(i=0; i<1600*1600; i++){
fread(&buf[i],1,1,fp1);
c=buf[i]-0; //char型のデータをint型に変換
histogram[c]=histogram[c]+1; //ヒストグラムを作成
}
//入力画像のヒストグラムをファイルに出力
for(i=0; i<256; i++){
fprintf(fphist1,"%3d:",i);
for(j=0; j<(histogram[i]/100); j++){
fputc('*',fphist1);
}
fputc('\n',fphist1);
}
//ヒストグラムを伸張化し、画像を書き出す
for(i=0; i<1600*1600; i++){
buf2[i]=((buf[i]-a)*255)/(b-a);
fwrite(&buf2[i],1,1,fp2);
}
//ヒストグラム伸張化後の画像のヒストグラムをファイルに出力
for(i=0; i<256; i++){
fprintf(fphist2,"%3d:",i);
for(j=0; j<(histogram2[i]/100); j++){
fputc('*',fphist2);
}
fputc('\n',fphist2);
}
fclose(fp1);
fclose(fp2);
fclose(fphist1);
fclose(fphist2);
return EXIT_SUCCESS;
}