質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.95%

openframeworksでofxMultikinectV2から取ってきたs画像をofxCvやofxOpenCVでいじる方法

受付中

回答 0

投稿

  • 評価
  • クリップ 0
  • VIEW 1,596

score 188

openframeworksでofxMultikinectV2から取ってきたIR画像をofxCvやofxOpenCVでいじる方法がわかりません。

現状、IR画像をフレームバッファに描画する時にシェーダーつかって処理して、フレームバッファからピクセル読み出して、アルファを消してRGBにしてofxOpenCVのimageにしています。
しかし、画像自体は出るのですが、画像がダブって表示されてうまく写りません。

誰か、教えていただけないでしょうか?

ofApp.h

class ofApp : public ofBaseApp{

    public:
        void setup();
        void update();
        void draw();

        void keyPressed(int key);
        void keyReleased(int key);
        void mouseMoved(int x, int y );
        void mouseDragged(int x, int y, int button);
        void mousePressed(int x, int y, int button);
        void mouseReleased(int x, int y, int button);
        void mouseEntered(int x, int y);
        void mouseExited(int x, int y);
        void windowResized(int w, int h);
        void dragEvent(ofDragInfo dragInfo);
        void gotMessage(ofMessage msg);

    ofxMultiKinectV2 kinect;
    ofTexture texture1;
    ofTexture texture2;
    ofxPanel gui;
    ofxTurboJpeg turbo;
    ofShader irShader;
    ofxCvGrayscaleImage irImage;
    ofFbo frameBuffer;
    ofPixels irPixels;

    int threshold;
    int width;
    int height;
    cv::Mat mat;
};

static string irFragmentShader =
STRINGIFY(
          uniform sampler2DRect tex;
          void main()
          {
              vec4 col = texture2DRect(tex, gl_TexCoord[0].xy);
              float value = col.r / 65535.0;
              gl_FragColor = vec4(vec3(value), 1.0);
          }
          );

ofApp.cpp

void ofApp::setup(){
    ofBackground(255, 255, 255);
    ofSetVerticalSync(true);
    ofSetFrameRate(60);
    kinect.open(true, true, 0, 2);
    kinect.start();
    irShader.setupShaderFromSource(GL_FRAGMENT_SHADER, irFragmentShader);
    irShader.linkProgram();
    width = 2585;
    height = 1081;

    irImage.allocate(width, height);
    frameBuffer.allocate(width, height);
}

//--------------------------------------------------------------
void ofApp::update(){
    kinect.update();
    if(kinect.isFrameNew()){
        texture2.loadData(kinect.getIrPixelsRef());
        if (texture2.isAllocated()) {
            frameBuffer.begin();
            irShader.begin();
            texture2.draw(0, 0, width, height);
            irShader.end();
            frameBuffer.end();
            frameBuffer.readToPixels(irPixels);

            unsigned char pixs2[width*height*3];
            for(int i = 0; i < width*height; i++)
            {
                pixs2[i*3]   = irPixels[i*4];
                pixs2[i*3+1] = irPixels[i*4];
                pixs2[i*3+2] = irPixels[i*4];
            }
            ofPixels pixels;
            pixels.setFromPixels(pixs2, width, height, GL_RGB);
            irImage.setFromPixels(pixs2, width, height);
        }
    }

}

//--------------------------------------------------------------
void ofApp::draw(){
    irImage.draw(0.0, 0.0, 960, 540);
    ofDrawBitmapStringHighlight(ofToString(ofGetFrameRate()), 10, 20);
    ofDrawBitmapStringHighlight("Device Count : " + ofToString(ofxMultiKinectV2::getDeviceCount()), 10, 40);
}
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

まだ回答がついていません

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.95%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る