【C++】乱数をかけた画像作成について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
G4

【C++】乱数をかけた画像作成について

#1

投稿記事 by G4 » 3年前

改めて質問失礼しますm(_ _)m
【C++で環境はfedoraです】

初心者なため無駄な文が多く入ってしまっているのですが
やりたいこととしては
画像を読み込んでその画像に乱数をかけたものを作成したいので
下のコードを修正してもらいたいです

フォルダーが3つあるのですが一斉にやるのではなく選択したフォルダー
だけできるように//ではぶいているのですが簡単に区別できる方法があれば
そちらも教えてけるいただけるとありがたいです。よろしくお願いしますm(_ _)m

コード:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>

#define IMAGE_AMOUNT 324000//データベースの枚数
#define FRAME_X_SIZE 128
#define FRAME_Y_SIZE 72

#define WIDTH  4
#define HEIGHT 3

main()
{
  int Get_Y_feature_vector(struct Image *image,int *pfreq, int vqsize, int w, int h);
  int Scale_senkei( struct Image *image, double zoom_x, double zoom_y);
  int partition(struct Image *image,int *hairetsu_num);
  int Directional_Vector(struct Image *image,int *Directional_Vector_hist);

  struct Image image;
  int modeflag,filtersize; 
  int pfreq[VQSIZE];
  int i,j,m,n,ret;
  char in_name[100],in_fname[100],db_fname[150];
  // char result_fnameMax[150],result_fnameAve[150],result_fnameMin[150];
  // char table_fname[200];
  double zoom_x,zoom_y;
   time_t  t1,t2,t3,t4,t5,t6,t7,t8;
   // double t1,t2;
  int runtime;
  int count;
  clock_t start,end;

  //float zx,zy;

  int dir1,dir2,file_no,frameno;
  char dir1_name[3],dir2_name[3],frame_name[3];

  FILE  *fp;
  FILE *image_file;


//画像データの読み込み
  for(i=1;i<116;i++){
	  for(j=1;j<50000;j++){      
		sprintf(in_fname,"../../image/15s_ref/%d/%d.ppm",i,j);			//1
		//sprintf(in_fname,"/run/media/susumu/WD/DB/%d/%d.ppm",i,j);	//2
		//sprintf(in_fname,"/run/media/susumu/WD/1h/%d/%d.ppm",i,j);	   //3


	nize_image();//ノイズをかける


//ノイズをかけた画像の作成
	sprintf(in_fname,"../../image/15s_ref_noiz/%d/%d.ppm",i,j);		//1-1,2-1
	//sprintf(in_fname,"/run/media/susumu/WD/DB_noiz/%d/%d.ppm",i,j);	//1-2,2-2
	//sprintf(in_fname,"/run/media/susumu/WD/1h_noiz/%d/%d.ppm",i,j);	//1-3
	  }
 return 0;
}




/*乱数の計算値*/
//(0,1)の一様分布の乱数の生成(genrand_real1())はメルセンヌツイスタに基く
//rand_normalはbox-muller法に基く

double rand_normal( double sigma ){
  double z=sqrt( -2.0*log(genrand_real1()) ) * sin( 2.0*M_PI*genrand_real1() );
  return sigma*z;
}

void noiz_image(struct Image image,double DIS){
  int i;
  int r,g,b;

  for(i=0;i<image.size;i++){
    r =(int)image.r[i] + (int)rand_normal(DIS);
    g =(int)image.g[i] + (int)rand_normal(DIS);
    b =(int)image.b[i] + (int)rand_normal(DIS);
    
    if(r>255){
      image.r[i] = 255;
    } else if(r<0){
      image.r[i] = 0;
    } else{
      image.r[i] = (unsigned char)r;
    }

    if(g>255){
      image.g[i] = 255;
    } else if(g<0){
      image.g[i] = 0;
    } else{
      image.g[i] = (unsigned char)g;
    }

    if(b>255){
      image.b[i] = 255;
    } else if(b<0){
      image.b[i] = 0;
    } else{
      image.b[i] = (unsigned char)b;
    }
  }
}
 

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