PImage img; img = loadImage("元a.jpg"); // 画像を読み込む img.resize(800, int(img.height*800.0/img.width)); // 横幅が800pxになるようにリサイズ img.filter(GRAY); // グレースケール化 // 疑似カラー化 float r, g, b; for (int i=0; i<img.pixels.length; i++) { float br=brightness(img.pixels[i])/255; // i番目のピクセルの明度を取得して0~1に規格化 if (br<0.25) { // 0~0.25の明るさ r=0; g=br*4; b=1; } else if (br<0.5) {// 0.25~0.5の明るさ r=0; g=1; b=(0.5-br)*4; } else if (br<0.75) {// 0.5~0.75の明るさ r=(br-0.5)*4; g=1; b=0; } else {// 3/4~1の明るさ r=1; g=(1-br)*4; b=0; } img.pixels[i] = color(r*255, g*255, b*255); } img.save("data/画像1.jpg"); // ファイルに保存 exit();
![]() |
![]() |
元a.jpg | 画像1.jpg (クリックで拡大) |
---|
PImage img; img = loadImage("元a.jpg"); // 画像を読み込む img.resize(800, int(img.height*800.0/img.width)); // 横幅が800pxになるようにリサイズ img.filter(BLUR, 3); // 画像をぼかす img.save("data/画像2.jpg"); // ファイルに保存 exit();
![]() | ![]() |
元a.jpg | 画像2.jpg (クリックで拡大) |
---|
PImage img; img = loadImage("元a.jpg"); // 画像を読み込む img.resize(800, int(img.height*800.0/img.width)); // 横幅が800pxになるようにリサイズ float[] outX = new float[img.width*img.height]; // 横の明度差を入れる配列 float[] outY = new float[img.width*img.height]; // 縦の明度差を入れる配列 for (int j=0; j<img.height; j++) { for (int i=0; i<img.width; i++) { int pos=i+j*img.width; if (i<img.width-1) outX[pos]=brightness(img.pixels[pos+1])-brightness(img.pixels[pos]); // 横に並んだピクセルの明度の差 if (j>0) outY[pos]=brightness(img.pixels[pos-img.width])-brightness(img.pixels[pos]); // 縦に並んだピクセルの明度の差 } } // 縦横の明度差の2乗の平方根を明度とした画像を作る for (int i=0; i<img.pixels.length; i++) { img.pixels[i]=color(sqrt(outX[i]*outX[i]+outY[i]*outY[i])); } img.save("data/画像3.png"); // ファイルに保存 exit();
![]() |
![]() |
元a.jpg | 画像3.png (クリックで拡大) |
---|
PImage img; img = loadImage("元a.jpg"); // 画像を読み込む img.resize(800, int(img.height*800.0/img.width)); // 横幅が800pxになるようにリサイズ int[] bayer={0, 8, 2, 10, 12, 4, 14, 6, 3, 11, 1, 9, 15, 7, 13, 5}; for (int j=0; j<img.height; j+=4) { for (int i=0; i<img.width; i+=4) { for (int k=0; k<16; k++) { int ci=i+k%4; // チェック位置(横) int cj=j+k/4; // チェック位置(縦) if (ci>=img.width || cj>=img.height) continue; // チェック位置が画像範囲外なら処理をスキップ if (brightness(img.pixels[ci+cj*img.width])>=bayer[k]*16+8) { img.pixels[ci+cj*img.width]=color(255); } else { img.pixels[ci+cj*img.width]=color(0); } } } } img.save("data/画像4.png"); // ファイルに保存 exit();
![]() |
![]() |
元a.jpg | 画像4.png (クリックで拡大) |
---|
PImage img; int d=2; // ずらし幅 img = loadImage("元a.jpg"); // 画像を読み込む img.resize(800, int(img.height*800.0/img.width)); // 横幅が800pxになるようにリサイズ PImage imgOut = createImage(img.width-d, img.height-d, RGB); // 出力画像 for (int j=0; j<img.height-d; j++) { for (int i=0; i<img.width-d; i++) { float f1=brightness(img.pixels[i+d+(j+d)*img.width]); // 元画像の(i+d, j+d)の位置の明度 float f2=255-brightness(img.pixels[i+j*img.width]); // 元画像の(i, j)の位置の明度を反転した値 imgOut.pixels[i+j*imgOut.width]=color(f1+f2-128); } } imgOut.save("data/画像5.jpg"); // ファイルに保存 exit();
![]() |
![]() |
元a.jpg | 画像5.jpg (クリックで拡大) |
---|
PImage imga, imgb; float alpha=0.5; // 画像の混合比率 imga = loadImage("元a.jpg"); // 画像を読み込む imgb = loadImage("元b.jpg"); // 画像を読み込む imga.resize(800, int(imga.height*800.0/imga.width)); // 横幅が800pxになるようにリサイズ imgb.resize(imga.width, imga.height); // 元aと同じ大きさにリサイズ for(int i=0;i<imga.pixels.length;i++){ float r=alpha*red(imga.pixels[i])+(1-alpha)*red(imgb.pixels[i]); float g=alpha*green(imga.pixels[i])+(1-alpha)*green(imgb.pixels[i]); float b=alpha*blue(imga.pixels[i])+(1-alpha)*blue(imgb.pixels[i]); imga.pixels[i]=color(r,g,b); } imga.save("data/画像6.jpg"); // ファイルに保存 exit();
![]() |
![]() |
元a.jpg | 元b.jpg |
---|---|
![]() |
|
画像6.jpg (クリックで拡大) |