openframeworksでofxMultikinectV2から取ってきたIR画像をofxCvやofxOpenCVでいじる方法がわかりません。
現状、IR画像をフレームバッファに描画する時にシェーダーつかって処理して、フレームバッファからピクセル読み出して、アルファを消してRGBにしてofxOpenCVのimageにしています。
しかし、画像自体は出るのですが、画像がダブって表示されてうまく写りません。
誰か、教えていただけないでしょうか?
ofApp.h
C++
1class ofApp : public ofBaseApp{ 2 3 public: 4 void setup(); 5 void update(); 6 void draw(); 7 8 void keyPressed(int key); 9 void keyReleased(int key); 10 void mouseMoved(int x, int y ); 11 void mouseDragged(int x, int y, int button); 12 void mousePressed(int x, int y, int button); 13 void mouseReleased(int x, int y, int button); 14 void mouseEntered(int x, int y); 15 void mouseExited(int x, int y); 16 void windowResized(int w, int h); 17 void dragEvent(ofDragInfo dragInfo); 18 void gotMessage(ofMessage msg); 19 20 ofxMultiKinectV2 kinect; 21 ofTexture texture1; 22 ofTexture texture2; 23 ofxPanel gui; 24 ofxTurboJpeg turbo; 25 ofShader irShader; 26 ofxCvGrayscaleImage irImage; 27 ofFbo frameBuffer; 28 ofPixels irPixels; 29 30 int threshold; 31 int width; 32 int height; 33 cv::Mat mat; 34}; 35 36static string irFragmentShader = 37STRINGIFY( 38 uniform sampler2DRect tex; 39 void main() 40 { 41 vec4 col = texture2DRect(tex, gl_TexCoord[0].xy); 42 float value = col.r / 65535.0; 43 gl_FragColor = vec4(vec3(value), 1.0); 44 } 45 );
ofApp.cpp
C++
1void ofApp::setup(){ 2 ofBackground(255, 255, 255); 3 ofSetVerticalSync(true); 4 ofSetFrameRate(60); 5 kinect.open(true, true, 0, 2); 6 kinect.start(); 7 irShader.setupShaderFromSource(GL_FRAGMENT_SHADER, irFragmentShader); 8 irShader.linkProgram(); 9 width = 2585; 10 height = 1081; 11 12 irImage.allocate(width, height); 13 frameBuffer.allocate(width, height); 14} 15 16//-------------------------------------------------------------- 17void ofApp::update(){ 18 kinect.update(); 19 if(kinect.isFrameNew()){ 20 texture2.loadData(kinect.getIrPixelsRef()); 21 if (texture2.isAllocated()) { 22 frameBuffer.begin(); 23 irShader.begin(); 24 texture2.draw(0, 0, width, height); 25 irShader.end(); 26 frameBuffer.end(); 27 frameBuffer.readToPixels(irPixels); 28 29 unsigned char pixs2[width*height*3]; 30 for(int i = 0; i < width*height; i++) 31 { 32 pixs2[i*3] = irPixels[i*4]; 33 pixs2[i*3+1] = irPixels[i*4]; 34 pixs2[i*3+2] = irPixels[i*4]; 35 } 36 ofPixels pixels; 37 pixels.setFromPixels(pixs2, width, height, GL_RGB); 38 irImage.setFromPixels(pixs2, width, height); 39 } 40 } 41 42} 43 44//-------------------------------------------------------------- 45void ofApp::draw(){ 46 irImage.draw(0.0, 0.0, 960, 540); 47 ofDrawBitmapStringHighlight(ofToString(ofGetFrameRate()), 10, 20); 48 ofDrawBitmapStringHighlight("Device Count : " + ofToString(ofxMultiKinectV2::getDeviceCount()), 10, 40); 49} 50
あなたの回答
tips
プレビュー