unknown@wiki 【C】平滑化フィルタ

※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

#include<stdio.h>
#include<stdlib.h>
#define H 200
#define V 301
 


main (){
  
 int i, j, q, p,**mem, **mean,sum;
 char s[256];
 FILE *fp;
 
 // memの確保
 mem=(int **)malloc(sizeof(int *)*H);
  if(mem==NULL){
   printf("please put any key to stop program \n");
   exit(1);
  }

    for(i=0;i<V;i++){
         mem[i]=(int *)malloc(sizeof(int)*V);
  if(mem[i]==NULL){
   printf("please put any key to stop program \n");
   exit(1);
  }
 }
 
 //平滑化後のmeanを確保
 mean=(int **)malloc(sizeof(int *)*H);
 if(mean==NULL){
  printf("please put any key to stop program \n");
  exit(1);
 }

    for(i=0;i<V;i++){
         mean[i]=(int *)malloc(sizeof(int)*V);
  if(mean[i]==NULL){
   printf("please put any key to stop program \n");
   exit(1);
  }
 }
 
 //meanの初期化
    for(j=0;j<V;j++){
     for(i=0;i<H;i++){
      mean[i][j]=0;
     }
    }

 
 //元画像の読み込み
    fp=fopen("testimg.pgm","r");
    if(fp==NULL){
       printf("Can not open file \n");
       exit(1);
    }
 
 //ヘッダ情報を無視
 for(i=0; i<4; i++){   
  fgets(s, 256, fp);
 }
   
 //ピクセル輝度値をmemに代入
    for(j=0;j<V;j++){
     for(i=0;i<H;i++){
  fscanf(fp,"%d", &mem[i][j]);

  }
 }
 fclose(fp);

 //5×5のwindow
 for (j=2;j<V-2;j++){
  for (i=2;i<H-2;i++){

   sum=0;
   for (q=0;q<5;q++){
    for (p=0;p<5;p++){   
     sum= sum+mem[i+p-2][j+q-2];
    }
   }
   mean[i][j] =sum/25;

  }
 }


 fp=fopen("mean1.txt","w");
    if(fp==NULL){
       printf("Can not open file \n");
       exit(1);
    }
 for(j=0;j<V;j++){
  for(i=0;i<H;i++){
            fprintf(fp,"%d ",mean[i][j]);
  }
  fprintf(fp,"\n");
  
 }
 fclose(fp);
 
}