###前提・実現したいこと
タイトルの通りの質問ですが、
以下のサンプルコードを改造してカメラから捉えた画像から指定の範囲(たとえば座標で指定するとか)だけ表示させるようにしたい
###発生している問題・エラーメッセージ
1.だが、調べたところ、leapのimageクラスも、cinderのsurfaceクラスにもそのようなfunctionを提供していないようです。
そもそも、leapのimageクラスはただジェスチャの確認用に作られているだけで、leapのカメラの画像の処理は用意されていないとか?タイトルのようなことはできるのでしょうか?
2.また、以下のコードから、描画の流れの部分を見たところ
image.dataでカメラからの画像を取得し、それをsurfaceに入れて、Iterクラスで何かを処理していると思うのですが、何をしているのでしょうか?
調べた限り、iterクラスは画像のピクセルにアクセスできるとのことで、具体的に何ができるのでしょうか?
例えば、コードのように、iter.r()とはなんでしょうか?
また、imageから取得したdataはなにdataでしょうか?明るさや輝度の情報ですか?
cinderのreferenceを見ても理解できなかったのですがorz
###該当のソースコード
c++
1コード 2 // カメラ画像を表示する 3 for (int i = 0; i < 2; i++){ 4 Leap::Image image = images[i]; 5 if (!image.isValid()){ 6 continue; 7 } 8 int width = image.width(); 9 const unsigned char* image_buffer = image.data(); 10 11 // グレースケールビットマップで描画する 12 Surface surface(image.width(), image.height(), image.width() * 4, 13 SurfaceChannelOrder::RGBA); 14 int cursor = 0; 15 Surface::Iter iter = surface.getIter(); 16 while (iter.line()) { 17 while (iter.pixel()) { 18 iter.r() = image_buffer[cursor]; 19 iter.g() = iter.b() = iter.r(); 20 iter.a() = 255; 21 cursor++; 22 } 23 } 24 // 画像を描画する 25 gl::Texture texture = gl::Texture(surface); 26 gl::draw(texture, 27 Area(0, IMAGE_HEIGHT * i, IMAGE_WIDTH, IMAGE_HEIGHT * (i + 1))); 28 }
あなたの回答
tips
プレビュー