PC・IT知識 Processing プログラミング 記事一覧

Processingで画像の輝度を段階分けしてcsvファイルに書き出し

更新日:


要はこういうこと

まどろっこしいタイトルで申し訳ありませんが要はこういうことです。授業のスライドから抜粋しました。

スクリーンショット 2014-12-08 12.33.15

 

このような画像を…
スクリーンショット 2014-12-08 12.33.31

このようにしてくれるプログラムです。ちなみに元画像はこちらからお借りしました。

挙動としては、画像を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やピクセルの扱いがわからない方に関しては、こちら等をお読みいただけるといいのではないかと思います。


余談ですが、なぜこのようなものを作ったかといいますと、このようなものが作りたかったためです。

S__11026468

クッキーモンスターをアーモンドで作ったやつです。計5人で作った作品です。

こういう授業がある方、是非このプログラムをご活用ください!笑

「面白いじゃん」と思ったらぜひシェアをお願いします!

-PC・IT知識, Processing, プログラミング, 記事一覧
-, , ,

Copyright© ちゃいら随筆 , 2019 All Rights Reserved Powered by STINGER.