【 KINECT 】ピクセルを調べる
Kinect から得られる各種画像を利用する為の基本操作として、画像を構成する個別ピクセルついて調べてみます。
距離画像の各ピクセルの色は、シーンのその部分の距離を表している、一方カラー画像の各ピクセルは3つの要素を持ち、それぞれ赤、緑、青に対応している。
これら両方の種類の画像を表示するアプリが動作しているので、両方の画像のピクセルを調べられるような機能を追加していきます。
プログラム
import SimpleOpenNI.*;
SimpleOpenNI kinect;
void setup()
{
size(640*2, 480);
kinect = new SimpleOpenNI(this);
kinect.enableDepth();
kinect.enableRGB();
}
void draw()
{
kinect.update();
PImage depthImage = kinect.depthImage( );
PImage rgbImage = kinect.rgbImage( );
image( depthImage, 0, 0);
image( rgbImage, 640, 0);
}
void mousePressed( ){
color c = get( mouseX, mouseY );
println( "r: " + red(c) + "g: " + green(c) + "b: "
+ blue(c));
}
|
プログラム解説( 機能追加部分のみ )
この関数は、実行中の Processing アプリの中でマウスをクリックするたびに呼び出される。
mousePressed 関数は、2つの働きをしている。
1.マウスでクリックされたピクセルの色を求めること。
2.そのピクセルに関する情報を表示させる。
mousePressed 関数の最初の行は get 関数を呼んでいる。これは、すでに画面上に描画された任意のピクセルの値へアクセスするために
processing が提供している関数
で、同関数は2つの引数を取り、それぞれの値を求めたいピクセルのX座標とY座標に対応している。
X座標、Y座標には、定数ではなく mouseX, mouseY を使う。これらは、Processing があらかじめマウスの現在の座標を自動的に代入しておいてくれる特殊な変数です。
mousePressed 関数の内部で、これらの引数と共に get を呼ぶことにより、ユーザーがちょうどクリックしたピクセルの色を正確に知ることができる。
そして、get は、色を返すので、その戻り値をローカル変数 c に保存する。
この変数は、color 型、つまりProcessing が色を保持するための型として宣言されている。
実行結果
距離画像 カラー画像
下の画像は、拡大できます。