要はこういうこと
まどろっこしいタイトルで申し訳ありませんが要はこういうことです。授業のスライドから抜粋しました。
このようにしてくれるプログラムです。ちなみに元画像はこちらからお借りしました。
挙動としては、画像をProcessingで読み込んで、それを各ピクセルの輝度に応じて0~3の数字に振り分け、csvファイルに格納するプログラムです。ごく単純ですね。
というわけで、以下プログラムです。
プログラム
[java]
/*
//cha1ra.com
//①~②の手順を確認した後、実行してね
//実行後、"q"を押さないとcsvファイルに書き込まれません。
*/
PrintWriter writer;
PImage img;
int[][] cookXY;
void setup() {
writer = createWriter("csv/cook1.csv");
cookXY = new int[256][256];
//①読み込むイメージの場所を指定
img = loadImage("src/cook1.jpg");
size(img.width, img.height);
noLoop();
}
void draw() {
image(img, 0, 0);
toSuji();
tocsv();
}
void toSuji() {
for (int y=0; y < img.height; y++) {
for (int x=0; x < img.width; x++) {
int br = int(brightness(img.get(x, y)));
br = int(br/64); //②等分を決める(例:7等分=36,4等分=64)
cookXY[x][y] = br;
//コンソール表示
print(cookXY[x][y] + " ");
}
println();
}
}
void tocsv() {
for (int y=0; y<img.height; y++) {
for (int x=0; x<img.width; x++) {
writer.print(cookXY[x][y] + ",");
}
writer.println();
}
}
void keyPressed(){
if( key == 'q' ){
writer.flush();
writer.close();
exit();
}
}
[/java]
Processingでcsvファイルに書き出す方法に関しては、こちらのサイトを参照させていただきました。PrintWriterなるものがそれに当たります。
あとは、PImageを用いて画像を読み込み(画像の読み込み先は"src/cook1.jpg"となってる部分です。任意のものに変えてください)、for文を回して各ピクセルごとの輝度を取り出して終了です。
PImageやピクセルの扱いがわからない方に関しては、こちら等をお読みいただけるといいのではないかと思います。
余談ですが、なぜこのようなものを作ったかといいますと、このようなものが作りたかったためです。
クッキーモンスターをアーモンドで作ったやつです。計5人で作った作品です。
こういう授業がある方、是非このプログラムをご活用ください!笑