ofxKinect サンプルコードをいじる setup()編
ofxKinectについて、サンプルコードをいじりつつ、使い方を学んでいく。
ofxKinect内の/exampleファイルにサンプルコードがある。
サンプルをビルドすると以下のようになる。
左上、左下が白黒映像だが、描画の具合が違う。
左下は距離センサーの決められた範囲で、単純に白黒で表示するのに対して、
上は色の濃度にあわせて白黒のグラデーション表示している。
右上はkinectからとった普通のカラー映像。
ofxKinectをアドオンに追加する際、ofxOpenCvも同時にアドオンに追加する。
testapp.hに
ofxKinect kinect(オブジェクト名 ) を追加
ofxCvColorImage colorImg;
ofxCvGrayscaleImage grayImage; // grayscale depth image
ofxCvGrayscaleImage grayThreshNear; // the near thresholded image
ofxCvGrayscaleImage grayThreshFar; // the far thresholded image
も同時に追加。
ofxCVColorImageと、ofxCvGrayscaleImageクラスについては、ofxCvImageクラスを継承している。 ofxCVアドオンの中にコードがあるので、詳しくはそこをみる。
testapp.cppの testapp::setup()内に以下を追加
ofSetLogLevel(OF_LOG_VERBOSE);
// enable depth->video image calibration
kinect.setRegistration(true);
kinect.init();
/ /kinect.init(true); // shows infrared instead of RGB video image
/ /kinect.init(false, false); // disable video image (faster fps)
kinect.open();// opens first available kinect
//kinect.open(1);// open a kinect by id, starting with 0 (sorted by serial #
lexicographically))
//kinect.open("A00362A08602047A");// open a kinect using it's unique serial #
ここでは、要はofxKinectクラスのオブジェクトであるkinectオブジェクトを、キャリブレーションし、kinectからとった映像を使えるようにしている。
ここで、kinect.setRegistration(true)をとってみても、起動できたので、ここではおそらくsetRegistrationの値を明示的にtrueにしていると思われる。
そしてkinect.init()で起動して、kinect.open()で使えるようにする。
続いて
colorImg.allocate(kinect.width, kinect.height); //colorImg = ofxCvColorImage class
grayImage.allocate(kinect.width, kinect.height); //ofxCvgrayimagescale class
grayThreshNear.allocate(kinect.width, kinect.height);
grayThreshFar.allocate(kinect.width, kinect.height);
はkinectで取得した情報を、colorImg,grayImage・・に投げている。詳しい挙動は現在のところ理解していない。kinect.width.kinect.heightは、kinectで取得した映像の縦横のピクセルだと思う。
allocateメソッドは、ofxCvImageクラス内に処理が記述してある。
引数に(int w,int h)を用いる。
続いてtestapp::setup()内
nearThreshold = 230;//?
farThreshold = 90;//?
bThreshWithOpenCV = true;
ofSetFrameRate(60);
// zero the tilt on startup
angle = 0;
kinect.setCameraTiltAngle(angle);// angle change
// start from the front
bDrawPointCloud = false;
ここで、
near Threshold = 230
farThreshold = 90
は、左下の、黒しろ2値の映像に対応する。
nearの方は、値が高いほど近くの物が認識される。
farは、低いほど、遠くの物が認識される。
kinect.setCameraTiltAngle(angle)は、kinect自体の縦のアングルを指定された角度に変更する。ここでは-30<=angle<=30 の間をいじれる。
bDrawPointCloud は、起動した後にpをおすと、カラー映像で、ピクセルを距離に応じて丸で表現するモードをオンにする。初期状態はオフ
。
setup()内に書かれているコードはこれまで。
ここまで
以上が、setup()内の内容である。
update()
draw()
内の記述については、また次のエントリで書こうと思う。
このサンプルのコードは、kinectを使うにあたって、基本的なものとなると思うので、しっかり理解していきたい。
ちなみに、このofxKinectのサンプルで、pを押すとdrawpointcloudモードになるが、これがめちゃくちゃいじってて楽しい。
映像のところでマウスドラッグすると、仮想カメラの位置が動いて、kinectでとった映像と、距離の情報にあわせて疑似3D映像になる。
openframeworks 文字表示について
文字表示について、参考文献などであまり情報がないので、ここで簡単にメモ
まず、基本的な使い方は、examples/graphics/fontsexampleをうごかしつつ。コードをチェックすべし
1:fontsexample/bin/data内に フォントのファイルが入ってるので、自分で使うファイルの/bin/dataにコピー。
2: testapp.h
ofTrueTypeFont verdana ←(インスタンス名);を追加。 ここではverdanaという名前でオブジェクトを作る
3 : testapp.cpp
setup()内に
{
ofTrueTypeFont::setGlobalDpi(72);
verdana.loadFont("verdana.ttf", 14, true, true);
verdana.setLineHeight(18.0f);
verdana.setLetterSpacing(1.037);
}を追加
メソッドの説明については省く
4 testapp.cpp
draw()内に
{
ofSetColor(225);
verdana.drawString("Font Example - use keyboard to type", 30, 35);
}
で、色をしていして、クオーテーション内に文字列を入力して、表示できる。
openframeworksは、図形インスタンスの作り方はめちゃくちゃネット上にのってるけど、文字表示については、あんま載ってないので、WEBベースで調べるよりかは、
examplesの中のサンプルをいじってみて、使いたいとこのコードを読むのが大事だと思う。
Openframeworks 描画図形の色設定 乱数について
クリックや、キー入力によって、新たな図形のインスタンスを作成して表示させ、そのインスタンスによって色をかえたい時、注意すべきこと
1
3色 赤青緑について、配列を作る。
int red[255];
int blue[255];
int green[255];
for(i=0;i<255;i++){
red[i] = i;
blue[i] = i;
green[i] = i;
}
で255個分の色の数値を作った上で
for文でofsetcolorに数値を投げる
。
ofsetcolor内の引数に直接
ofsetColor(ofRandom(0,255),ofRandom(0,255),ofRandom(0,255));
と乱数を投げると、
フレームごとに色が変わって、かなりアブない感じになる。ちらつきが半端ないので、
乱数の0-255の値をある程度しぼってけば、それなりに優しい色使いになるかと
openframeworks Box2dについて
Openframeworks Box2dについてのメモ
box2d.init() //BOX2d初期化
.setgravity(x,y) // 重力設定 左上が原点
.createBounds(x1,y1,x2,y2) 画面のサイズ設定
.setFPS(x) // フレーム数x に設定
.update(); //Box2d 更新
.draw(); //描画
アドオンについて コンパイルがうまく行かないとき
アドオンファイルの直下にexampleが入ってる場合があるので、参照を外す
■
VPSはぶっ壊してまた設定して、ぶっ壊して、そんな感じで覚えてけ
とは冗談ですが、centosいじってて、また調子わるくなったので、
OSの再インストールを実行した。
複数ドメインに対して、 /etc/httpd/conf/httpd.config で設定をし、
それぞれのドメインに対して別のルートフォルダにあるものを表示できるようになった。
以下は自分へのメモ
3SSH設定
ターミナルから、サーバログインのために、sshの設定をする必要がある。
設定ファイルは
/etc/ssh/sshd_config
内容を変更するのだが、
- ポート番号変更
#Port 22
部分のコメントアウトを外して、任意の番号にする
- PermitRootLoginの変更
ルートでのログインを禁止するため
#PermitRootLogin yes
ノコメントアウトをはずし、 noに変更
が必要。
変更後、/etc/rc.d/init/d/sshd restart
で再起動する。
centos LAMP環境
前回のRSA鍵設定からだいぶたったが、とりあえずmac上で鍵設定完了した。
それから現在までは、file操作等のコマンドをいじってみたりした。
サイトを立ち上げたいので、LAMP環境を整えようと考えた。
apacheでなくて、nginxが最近流行らしいが、とりあえずは後においといて、
そんでまだ途中だが、httpd.conf等をいじってHTMLファイルを表示できるようになった。
とりあえずはこんなもんで。あとは細かい設定、そんで実際にサイトつくってみる。
自分の写真をのせたくて、javascriptとかでうまいこと表示できるか試してみよう。