More than 1 year has passed since last update.

環境

  • of_v0.8.4_vs_release
  • Visual Studio Express 2012 for Windows
  • kinect v2
  • Windows Embedded 8

各種パスの設定

まずプロジェクトファイルのプロパティを開く

1.構成プロパティ > C/C++ > 追加のインクルードディレクトリに$(KINECTSDK20_DIR)¥inc;を追加

1.JPG

2.構成プロパティ > リンカー > 全般 > 追加のライブラリディレクトリに$(KINECTSDK20_DIR)¥lib¥x86;を追加

2.JPG

3.構成プロパティ > リンカー > 入力にKinect20.libを追加

5.JPG

4.構成プロパティ > VC++ディレクトリ > インクルードディレクトリに$(KINECTSDK20_DIR)\inc;を入力
5.構成プロパティ > VC++ディレクトリ > ライブラリディレクトリに$(KINECTSDK20_DIR)\lib\x86;を入力

4.JPG

カラー画像の表示

ofApp.h

#pragma once

#include "ofMain.h"
#include <kinect.h>

template<class Interface>
inline void SafeRelease(Interface *& pInterfaceToRelease)
{
    if (pInterfaceToRelease != NULL) {
        pInterfaceToRelease->Release();
        pInterfaceToRelease = NULL;
    }
}

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 windowResized(int w, int h);
        void dragEvent(ofDragInfo dragInfo);
        void gotMessage(ofMessage msg);
        bool initKinect();

        IKinectSensor *sensor;

        IColorFrameSource *colorSource;
        IColorFrameSource *colorFrameSource;
        IColorFrameReader *colorReader;
        IFrameDescription* colorDescription;
        int colorWidth, colorHeight;
        unsigned int colorBytesPerPixels;

        ofImage colorImage;

};


ofApp.cpp

#include "ofApp.h"

//--------------------------------------------------------------
void ofApp::setup(){
    ofSetWindowShape(1920, 1080);
    ofSetFrameRate(30);

    if (!initKinect()) exit();

    colorImage.allocate(colorWidth, colorHeight, OF_IMAGE_COLOR_ALPHA);
}

//--------------------------------------------------------------
void ofApp::update(){
    IColorFrame* colorFrame = nullptr;
    HRESULT hResult = colorReader->AcquireLatestFrame(&colorFrame);

    if (SUCCEEDED(hResult)) {
        hResult = colorFrame->CopyConvertedFrameDataToArray(colorHeight * colorWidth * colorBytesPerPixels, colorImage.getPixels(), ColorImageFormat_Rgba);
        colorImage.update();
    }

    SafeRelease(colorFrame);
}

//--------------------------------------------------------------
void ofApp::draw(){
    colorImage.draw(0,0);
}

bool ofApp:: initKinect() {
    HRESULT hResult = S_OK;
    hResult = GetDefaultKinectSensor(&sensor);
    if (FAILED(hResult)) {
        std::cerr << "Error : GetDefaultKinectSensor" << std::endl;
        return -1;
    }

    hResult = sensor->Open();
    if (FAILED(hResult)) {
        std::cerr << "Error : IKinectSensor::Open()" << std::endl;
        return -1;
    }

    hResult = sensor->get_ColorFrameSource(&colorSource);
    if (FAILED(hResult)) {
        std::cerr << "Error : IKinectSensor::get_ColorFrameSource()" << std::endl;
        return -1;
    }

    hResult = colorSource->OpenReader(&colorReader);
    if (FAILED(hResult)) {
        std::cerr << "Error : IColorFrameSource::OpenReader()" << std::endl;
        return -1;
    }

    hResult = colorSource->CreateFrameDescription(ColorImageFormat::ColorImageFormat_Rgba, &colorDescription);
    if (FAILED(hResult)) {
        std::cerr << "Error : IColorFrameSource::get_FrameDescription()" << std::endl;
        return -1;
    }
    colorDescription->get_Width(&colorWidth);
    colorDescription->get_Height(&colorHeight);
    colorDescription->get_BytesPerPixel(&colorBytesPerPixels);

    return true;
}

//--------------------------------------------------------------
void ofApp::keyPressed(int key){

}

//--------------------------------------------------------------
void ofApp::keyReleased(int key){

}

//--------------------------------------------------------------
void ofApp::mouseMoved(int x, int y ){

}

//--------------------------------------------------------------
void ofApp::mouseDragged(int x, int y, int button){

}

//--------------------------------------------------------------
void ofApp::mousePressed(int x, int y, int button){

}

//--------------------------------------------------------------
void ofApp::mouseReleased(int x, int y, int button){

}

//--------------------------------------------------------------
void ofApp::windowResized(int w, int h){

}

//--------------------------------------------------------------
void ofApp::gotMessage(ofMessage msg){

}

//--------------------------------------------------------------
void ofApp::dragEvent(ofDragInfo dragInfo){ 

}


参考

http://www.hirotakaster.com/weblog/openframeworks-0-8-3-and-kinect-v2/
http://www.buildinsider.net/small/kinectv2cpp/02