Processing サンプルプログラム 3 2 枚の画像の平均 左右反転

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 を貼る