Processing サンプルプログラム 3 2013.5.17 2 枚の画像の平均 PImage f1, f2, g; void setup(){ f1 = loadImage("image1.png"); f2 = loadImage("image2.png"); g = createImage(f1.width, f1.height, RGB); size(f1.width*2, f1.height*2); // // // // for(int y = 0; y < g.height; y++){ for(int x = 0; x < g.width; x++){ float R, G, B; R = red(f1.get(x,y)) + red(f2.get(x,y)); R = R / 2; G = green(f1.get(x,y)) + green(f2.get(x,y)); G = G / 2; B = blue(f1.get(x,y)) + blue(f2.get(x,y)); B = B / 2; g.set(x, y, color(R, G, B)); } } ファイルから入力画像 1 を読み込む ファイルから入力画像 2 を読み込む 入力画像と同じサイズで出力画像 g を用意 実行画面サイズを指定 // R 成分の平均 // G 成分の平均 // B 成分の平均 // 出力画像 g に画素値を設定 } void draw(){ image(f1, 0, 0); image(f2, f1.width, 0); image(g, f1.width/2, f1.height); } // 左に入力画像 f1 を貼る // 右に入力画像 f2 を貼る // 下に出力画像 g を貼る 左右反転 PImage f, g; void setup(){ f = loadImage("lena.png"); // f.filter(GRAY); // g = createImage(f.width, f.height, RGB); // size(f.width*2, f.height); // for(int Y for(int float int = 0; Y < f.height; Y++){ X = 0; X < f.width; X++){ a; x, y; x = f.width-1 - X; y = Y; a = red(f.get(X, Y)); g.set(x, y, color(a)); ファイルから入力画像を読み込む 入力画像 f をグレイスケールに変換 入力画像 f と同じサイズで出力画像 g を用意 実行画面サイズを指定 // (X,Y):入力画像 f における座標 // (x,y):出力画像 g における座標 // 座標変換 (X,Y)→ (x,y) // 入力画像 f から画素値を取り出す // 出力画像 g に画素値を設定 } } } void draw(){ image(f, 0, 0); image(g, f.width, 0); } // 左に入力画像 f を貼る // 右に出力画像 g を貼る 縦横 2 倍に拡大(補間なし) PImage f, g; void setup(){ f = loadImage("lena.png"); // ファイルから入力画像を読み込む f.filter(GRAY); // 入力画像 f をグレイスケールに変換 g = createImage(f.width, f.height, RGB); // 入力画像 f と同じサイズで出力画像 g を用意 size(f.width*2, f.height); // 実行画面サイズを指定 for(int y for(int float int // (x,y):出力画像 g における座標 = 0; y < g.height; y++){ x = 0; x < g.width; x++){ a; X, Y; X = int(x / 2.0); Y = int(y / 2.0); a = red(f.get(X, Y)); g.set(x, y, color(a)); // (X,Y):入力画像 f における座標 // 座標変換 (x,y)→(X,Y) // 入力画像 f から画素値を取り出す // 出力画像 g に画素値を設定 } } } void draw(){ image(f, 0, 0); image(g, f.width, 0); } // 左に入力画像 f を貼る // 右に出力画像 g を貼る 縦横 2 倍に拡大(バイリニア補間) PImage f, g; void setup(){ f = loadImage("lena.png"); f.filter(GRAY); g = createImage(f.width, f.height, RGB); // ファイルから入力画像を読み込む // 入力画像 f をグレイスケールに変換 // 入力画像 f と同じサイズで出力画像 g を用意 size(f.width*2, f.height); // 実行画面サイズを指定 for(int y for(int float float int // (x,y):出力画像 g における座標 = 0; y < g.height; y++){ x = 0; x < g.width; x++){ a, s, t; Xf, Yf; X, Y; Xf = x / 2.0; Yf = y / 2.0; X = int(Xf); Y = int(Yf); s = Xf - X; t = Yf - Y; a = (1-s)*(1-t) * red(f.get(X, Y )) + s *(1-t) * red(f.get(X+1,Y )) + (1-s)* t * red(f.get(X ,Y+1)) + s * t * red(f.get(X+1,Y+1)); g.set(x, y, color(a)); // (Xf,Yf):入力画像 f における座標(実数) // (X,Y): 入力画像 f における座標(整数) // 座標変換 (x,y)→(Xf,Yf) // 小数点以下切り捨て // 内分比 s,t を計算 // バイリニア補間 // 出力画像 g に画素値を設定 } } } void draw(){ image(f, 0, 0); image(g, f.width, 0); } // 左に入力画像 f を貼る // 右に出力画像 g を貼る
© Copyright 2024 Paperzz