raw画像を読み込み、ヒストグラムを伸張化して出力するプログラムについて。

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
いちこ
記事: 62
登録日時: 13年前
連絡を取る:

raw画像を読み込み、ヒストグラムを伸張化して出力するプログラムについて。

#1

投稿記事 by いちこ » 13年前

まだ初心者ですが、よろしくおねがいします。
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;
}


アバター
h2so5
副管理人
記事: 2212
登録日時: 14年前
住所: 東京
連絡を取る:

Re: raw画像を読み込み、ヒストグラムを伸張化して出力するプログラムについて。

#2

投稿記事 by h2so5 » 13年前

質問する前に、どこで実行が止まるのかを突き止めましょう。

41行目は fphist2 の間違いだと思います。

いちこ
記事: 62
登録日時: 13年前
連絡を取る:

Re: raw画像を読み込み、ヒストグラムを伸張化して出力するプログラムについて。

#3

投稿記事 by いちこ » 13年前

>>h2so5さん
返信、ご指摘ありがとうございます!
41行目は改善します。すみません><

どこで止まるのかも調べてみようと思います。

いちこ
記事: 62
登録日時: 13年前
連絡を取る:

Re: raw画像を読み込み、ヒストグラムを伸張化して出力するプログラムについて。

#4

投稿記事 by いちこ » 13年前

どうやらいろいろな場所が間違っていたようです。
見てくださった皆さんには、ご迷惑をおかけしました。
すみません。

下のように改善しましたところ、無事実行することができました。

コード:

#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((fphist2=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);

   c=buf2[i]-0;
  histogram2[c]=histogram2[c]+1; //ヒストグラムを作成

  }


  //ヒストグラム伸張化後の画像のヒストグラムをファイルに出力 
  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;
}


いちこ
記事: 62
登録日時: 13年前
連絡を取る:

Re: raw画像を読み込み、ヒストグラムを伸張化して出力するプログラムについて。

#5

投稿記事 by いちこ » 13年前

>>h2so5さん、見てくださったみなさまどうもありがとうございました。
ご迷惑をおかけしてしまい申し訳ありません。
今後はもっとよく考えてからスレッドを立てるようにします><

閉鎖

“C言語何でも質問掲示板” へ戻る