ページ 11

OpenNIとOpenCVについて

Posted: 2012年3月26日(月) 15:22
by sanni
KinectをPCでプログラミングして動かそうとOpenNIとOpenCV2.3.1を導入しました
しかし、エラーが出て動きません
NI,CVそれぞれ単体のサンプルプログラムは動いたのですが、2つをいっぺんに動かせないのです
xncppwrapper.hが原因らしいのですが、よく分かりません
このヘッダーファイルはちゃんとありますし、フォルダ指定が間違っているわけでもなさそうなので・・・
win7(32bit),MicrosoftVisualC++2010で動かしています
どなたかご助力お願いします
CVのサンプルプログラムと言うのは↓に書いてある物を使っています
http://imagingsolution.net/program/open ... d-install/
以下がプログラムになります

コード:

#include <opencv2/opencv.hpp>
#ifdef _DEBUG
    //Debugモードの場合
    #pragma comment(lib,"C:\\opencv\\build\\install\\lib\\opencv_core220d.lib")            // opencv_core
    #pragma comment(lib,"C:\\opencv\\build\\install\\lib\\opencv_imgproc220d.lib")        // opencv_imgproc
    #pragma comment(lib,"C:\\opencv\\build\\install\\lib\\opencv_highgui220d.lib")        // opencv_highgui
    #pragma comment(lib,"C:\\opencv\\build\\install\\lib\\opencv_objdetect220d.lib")    // opencv_objdetect
    //以下、必要に応じて追加
    //#pragma comment(lib,"C:\\opencv\\build\\install\\lib\\opencv_ml220d.lib")            // opencv_ml
    //#pragma comment(lib,"C:\\opencv\\build\\install\\lib\\opencv_features2d220d.lib")    // opencv_features2d
    //#pragma comment(lib,"C:\\opencv\\build\\install\\lib\\opencv_video220d.lib")        // opencv_video
    //#pragma comment(lib,"C:\\opencv\\build\\install\\lib\\opencv_calib3d220d.lib")        // opencv_calib3d
    //#pragma comment(lib,"C:\\opencv\\build\\install\\lib\\opencv_flann220d.lib")        // opencv_flann
    //#pragma comment(lib,"C:\\opencv\\build\\install\\lib\\opencv_contrib220d.lib")        // opencv_contrib
    //#pragma comment(lib,"C:\\opencv\\build\\install\\lib\\opencv_legacy220d.lib")        // opencv_legacy
    //#pragma comment(lib,"C:\\opencv\\build\\install\\lib\\opencv_gpu220d.lib")            // opencv_gpu
#else
    //Releaseモードの場合
    #pragma comment(lib,"C:\\opencv\\build\\install\\lib\\opencv_core220.lib")            // opencv_core
    #pragma comment(lib,"C:\\opencv\\build\\install\\lib\\opencv_imgproc220.lib")        // opencv_imgproc
    #pragma comment(lib,"C:\\opencv\\build\\install\\lib\\opencv_highgui220.lib")        // opencv_highgui
    #pragma comment(lib,"C:\\opencv\\build\\install\\lib\\opencv_objdetect220.lib")    // opencv_objdetect
    //以下、必要に応じて追加
    //#pragma comment(lib,"C:\\opencv\\build\\install\\lib\\opencv_ml220.lib")            // opencv_ml
    //#pragma comment(lib,"C:\\opencv\\build\\install\\lib\\opencv_features2d220.lib")    // opencv_features2d
    //#pragma comment(lib,"C:\\opencv\\build\\install\\lib\\opencv_video220.lib")        // opencv_video
    //#pragma comment(lib,"C:\\opencv\\build\\install\\lib\\opencv_calib3d220.lib")        // opencv_calib3d
    //#pragma comment(lib,"C:\\opencv\\build\\install\\lib\\opencv_flann220.lib")        // opencv_flann
    //#pragma comment(lib,"C:\\opencv\\build\\install\\lib\\opencv_contrib220.lib")        // opencv_contrib
    //#pragma comment(lib,"C:\\opencv\\build\\install\\lib\\opencv_legacy220.lib")        // opencv_legacy
    //#pragma comment(lib,"C:\\opencv\\build\\install\\lib\\opencv_gpu220.lib")            // opencv_gpu
#endif

#include <XnCppWrapper.h>
#pragma comment(lib,"C:/Program files/OpenNI/Lib/openNI.lib")

#define SAMPLE_XML_PATH "C:/Program Files/OpenNI/Data/SamplesConfig.xml"
using namespace cv;
using namespace xn;

int main()
{
    Context context;
    EnumerationErrors errors;

    context.InitFromXmlFile(SAMPLE_XML_PATH);
    
    DepthGenerator depthGenerator;// depth context
    context.FindExistingNode(XN_NODE_TYPE_DEPTH, depthGenerator);
    
    ImageGenerator imageGenerator;//image context
    context.FindExistingNode(XN_NODE_TYPE_IMAGE, imageGenerator);

    DepthMetaData depthMD;
    ImageMetaData imageMD;

    Mat image(480,640,CV_8UC3);
    Mat depth(480,640,CV_16UC1);
    int key = 0;
    bool isWarp=false;
    while (key!='q')
    {
        //wait and error processing 
        context.WaitAnyUpdateAll();

        imageGenerator.GetMetaData(imageMD);
        depthGenerator.GetMetaData(depthMD);
        depthGenerator.GetAlternativeViewPointCap().SetViewPoint(imageGenerator);//ズレを補正
            
        memcpy(image.data,imageMD.Data(),image.step * image.rows);    //イメージデータを格納
        memcpy(depth.data,depthMD.Data(),depth.step * depth.rows);    //深度データを格納
                
        //convert color space RGB2BGR
        cvtColor(image,image,CV_RGB2BGR);        
        
        imshow("image",image);
        imshow("depth",depth);
        key = waitKey(33);
    }
    context.Shutdown();
    return 0;
}
以下が出力した時の文になります

1>------ ビルド開始: プロジェクト: Rgb, 構成: Debug Win32 ------
1> main.cpp
1>c:\program files\openni\include\win32\xnplatformwin32.h(46): warning C4005: '_CRT_SECURE_NO_DEPRECATE' : マクロが再定義されました。
1> c:\opencv\build\include\opencv2\core\types_c.h(47) : '_CRT_SECURE_NO_DEPRECATE' の前の定義を確認してください
1>c:\program files\openni\include\xncppwrapper.h(332): error C2065: 'XN_PIXEL_FORMAT_MJPEG' : 定義されていない識別子です。
1>c:\program files\openni\include\xncppwrapper.h(332): error C2051: case 式は、整数型定数でなければなりません。
1>c:\program files\openni\include\xncppwrapper.h(1108): error C3861: 'xnGetRefContextFromNodeHandle': 識別子が見つかりませんでした
1>c:\program files\openni\include\xncppwrapper.h(1109): error C3861: 'xnContextUnregisterFromShutdown': 識別子が見つかりませんでした
1>c:\program files\openni\include\xncppwrapper.h(1110): error C3861: 'xnContextRelease': 識別子が見つかりませんでした
1>c:\program files\openni\include\xncppwrapper.h(1120): error C3861: 'xnGetRefContextFromNodeHandle': 識別子が見つかりませんでした
1>c:\program files\openni\include\xncppwrapper.h(1122): error C3861: 'xnContextRegisterForShutdown': 識別子が見つかりませんでした
1>c:\program files\openni\include\xncppwrapper.h(1125): error C3861: 'xnContextRelease': 識別子が見つかりませんでした
1>c:\program files\openni\include\xncppwrapper.h(1257): error C3861: 'xnNodeInfoGetAdditionalData': 識別子が見つかりませんでした
1>c:\program files\openni\include\xncppwrapper.h(1555): error C2061: 構文エラー : 識別子 'XnFreeHandler'
1>c:\program files\openni\include\xncppwrapper.h(1558): error C2065: 'pFreeHandler' : 定義されていない識別子です。
1>c:\program files\openni\include\xncppwrapper.h(1558): error C3861: 'xnNodeInfoListAddEx': 識別子が見つかりませんでした
1>c:\program files\openni\include\xncppwrapper.h(1736): error C3861: 'xnGetGeneralIntRange': 識別子が見つかりませんでした
1>c:\program files\openni\include\xncppwrapper.h(1745): error C3861: 'xnGetGeneralIntValue': 識別子が見つかりませんでした
1>c:\program files\openni\include\xncppwrapper.h(1754): error C3861: 'xnSetGeneralIntValue': 識別子が見つかりませんでした
1>c:\program files\openni\include\xncppwrapper.h(1969): error C3861: 'xnGetDeviceName': 識別子が見つかりませんでした
1>c:\program files\openni\include\xncppwrapper.h(1977): error C3861: 'xnGetVendorSpecificData': 識別子が見つかりませんでした
1>c:\program files\openni\include\xncppwrapper.h(1985): error C3861: 'xnGetSerialNumber': 識別子が見つかりませんでした
1>c:\program files\openni\include\xncppwrapper.h(2284): error C3861: 'xnGetData': 識別子が見つかりませんでした
1>c:\program files\openni\include\xncppwrapper.h(2402): error C3861: 'xnGetRecorderDestination': 識別子が見つかりませんでした
1>c:\program files\openni\include\xncppwrapper.h(2651): error C2061: 構文エラー : 識別子 'XnPowerLineFrequency'
1>c:\program files\openni\include\xncppwrapper.h(2659): error C2146: 構文エラー : ';' が、識別子 'GetPowerLineFrequency' の前に必要です。
1>c:\program files\openni\include\xncppwrapper.h(2659): error C2433: 'xn::AntiFlickerCapability::XnPowerLineFrequency' : 'inline' はデータ宣言をするのに使用できません。
1>c:\program files\openni\include\xncppwrapper.h(2659): error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\program files\openni\include\xncppwrapper.h(2660): error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\program files\openni\include\xncppwrapper.h(2662): warning C4183: 'GetPowerLineFrequency': 戻り値の型がありません。'int' を返すメンバー関数とみなします。
1>c:\program files\openni\include\xncppwrapper.h(2653): error C2065: 'nFrequency' : 定義されていない識別子です。
1>c:\program files\openni\include\xncppwrapper.h(2653): error C3861: 'xnSetPowerLineFrequency': 識別子が見つかりませんでした
1>c:\program files\openni\include\xncppwrapper.h(2661): error C3861: 'xnGetPowerLineFrequency': 識別子が見つかりませんでした
1>c:\program files\openni\include\xncppwrapper.h(2669): error C2065: 'xnRegisterToPowerLineFrequencyChange' : 定義されていない識別子です。
1>c:\program files\openni\include\xncppwrapper.h(2677): error C2065: 'xnUnregisterFromPowerLineFrequencyChange' : 定義されていない識別子です。
1>c:\program files\openni\include\xncppwrapper.h(2733): error C3861: 'xnGetBytesPerPixel': 識別子が見つかりませんでした
1>c:\program files\openni\include\xncppwrapper.h(2779): error C2065: 'XN_CAPABILITY_BRIGHTNESS' : 定義されていない識別子です。
1>c:\program files\openni\include\xncppwrapper.h(2789): error C2065: 'XN_CAPABILITY_CONTRAST' : 定義されていない識別子です。
1>c:\program files\openni\include\xncppwrapper.h(2799): error C2065: 'XN_CAPABILITY_HUE' : 定義されていない識別子です。
1>c:\program files\openni\include\xncppwrapper.h(2809): error C2065: 'XN_CAPABILITY_SATURATION' : 定義されていない識別子です。
1>c:\program files\openni\include\xncppwrapper.h(2819): error C2065: 'XN_CAPABILITY_SHARPNESS' : 定義されていない識別子です。
1>c:\program files\openni\include\xncppwrapper.h(2829): error C2065: 'XN_CAPABILITY_GAMMA' : 定義されていない識別子です。
1>c:\program files\openni\include\xncppwrapper.h(2839): error C2065: 'XN_CAPABILITY_COLOR_TEMPERATURE' : 定義されていない識別子です。
1>c:\program files\openni\include\xncppwrapper.h(2849): error C2065: 'XN_CAPABILITY_BACKLIGHT_COMPENSATION' : 定義されていない識別子です。
1>c:\program files\openni\include\xncppwrapper.h(2859): error C2065: 'XN_CAPABILITY_GAIN' : 定義されていない識別子です。
1>c:\program files\openni\include\xncppwrapper.h(2869): error C2065: 'XN_CAPABILITY_PAN' : 定義されていない識別子です。
1>c:\program files\openni\include\xncppwrapper.h(2879): error C2065: 'XN_CAPABILITY_TILT' : 定義されていない識別子です。
1>c:\program files\openni\include\xncppwrapper.h(2889): error C2065: 'XN_CAPABILITY_ROLL' : 定義されていない識別子です。
1>c:\program files\openni\include\xncppwrapper.h(2899): error C2065: 'XN_CAPABILITY_ZOOM' : 定義されていない識別子です。
1>c:\program files\openni\include\xncppwrapper.h(2909): error C2065: 'XN_CAPABILITY_EXPOSURE' : 定義されていない識別子です。
1>c:\program files\openni\include\xncppwrapper.h(2919): error C2065: 'XN_CAPABILITY_IRIS' : 定義されていない識別子です。
1>c:\program files\openni\include\xncppwrapper.h(2929): error C2065: 'XN_CAPABILITY_FOCUS' : 定義されていない識別子です。
1>c:\program files\openni\include\xncppwrapper.h(2939): error C2065: 'XN_CAPABILITY_LOW_LIGHT_COMPENSATION' : 定義されていない識別子です。
1>c:\program files\openni\include\xncppwrapper.h(3510): error C3861: 'xnGetNumberOfAvailableGestures': 識別子が見つかりませんでした
1>c:\program files\openni\include\xncppwrapper.h(3630): error C3861: 'xnRegisterToGestureIntermediateStageCompleted': 識別子が見つかりませんでした
1>c:\program files\openni\include\xncppwrapper.h(3647): error C3861: 'xnUnregisterFromGestureIntermediateStageCompleted': 識別子が見つかりませんでした
1>c:\program files\openni\include\xncppwrapper.h(3672): error C3861: 'xnRegisterToGestureReadyForNextIntermediateStage': 識別子が見つかりませんでした
1>c:\program files\openni\include\xncppwrapper.h(3690): error C3861: 'xnUnregisterFromGestureReadyForNextIntermediateStage': 識別子が見つかりませんでした
1>c:\program files\openni\include\xncppwrapper.h(3828): error C2061: 構文エラー : 識別子 'XnDirection'
1>c:\program files\openni\include\xncppwrapper.h(3870): error C2061: 構文エラー : 識別子 'XnDirection'
1>c:\program files\openni\include\xncppwrapper.h(3841): error C3861: 'xnRegisterToHandTouchingFOVEdge': 識別子が見つかりませんでした
1>c:\program files\openni\include\xncppwrapper.h(3859): error C3861: 'xnUnregisterFromHandTouchingFOVEdge': 識別子が見つかりませんでした
1>c:\program files\openni\include\xncppwrapper.h(3872): error C2065: 'pCookie' : 定義されていない識別子です。
1>c:\program files\openni\include\xncppwrapper.h(3876): error C2065: 'eDir' : 定義されていない識別子です。
1>c:\program files\openni\include\xncppwrapper.h(4407): error C2061: 構文エラー : 識別子 'XnCalibrationStatus'
1>c:\program files\openni\include\xncppwrapper.h(4451): error C2061: 構文エラー : 識別子 'XnCalibrationStatus'
1>c:\program files\openni\include\xncppwrapper.h(4536): error C2061: 構文エラー : 識別子 'XnCalibrationStatus'
1>c:\program files\openni\include\xncppwrapper.h(4553): error C2061: 構文エラー : 識別子 'XnCalibrationStatus'
1>c:\program files\openni\include\xncppwrapper.h(4215): error C3861: 'xnSaveSkeletonCalibrationDataToFile': 識別子が見つかりませんでした
1>c:\program files\openni\include\xncppwrapper.h(4223): error C3861: 'xnLoadSkeletonCalibrationDataFromFile': 識別子が見つかりませんでした
1>c:\program files\openni\include\xncppwrapper.h(4375): error C3861: 'xnRegisterToCalibrationStart': 識別子が見つかりませんでした
1>c:\program files\openni\include\xncppwrapper.h(4394): error C3861: 'xnUnregisterFromCalibrationStart': 識別子が見つかりませんでした
1>c:\program files\openni\include\xncppwrapper.h(4421): error C3861: 'xnRegisterToCalibrationInProgress': 識別子が見つかりませんでした
1>c:\program files\openni\include\xncppwrapper.h(4439): error C3861: 'xnUnregisterFromCalibrationInProgress': 識別子が見つかりませんでした
1>c:\program files\openni\include\xncppwrapper.h(4464): error C3861: 'xnRegisterToCalibrationComplete': 識別子が見つかりませんでした
1>c:\program files\openni\include\xncppwrapper.h(4482): error C3861: 'xnUnregisterFromCalibrationComplete': 識別子が見つかりませんでした
1>c:\program files\openni\include\xncppwrapper.h(4538): error C2065: 'pCookie' : 定義されていない識別子です。
1>c:\program files\openni\include\xncppwrapper.h(4542): error C2065: 'calibrationError' : 定義されていない識別子です。
1>c:\program files\openni\include\xncppwrapper.h(4555): error C2065: 'pCookie' : 定義されていない識別子です。
1>c:\program files\openni\include\xncppwrapper.h(4559): error C2065: 'calibrationError' : 定義されていない識別子です。
1>c:\program files\openni\include\xncppwrapper.h(4617): error C2061: 構文エラー : 識別子 'XnPoseDetectionStatus'
1>c:\program files\openni\include\xncppwrapper.h(4755): error C2061: 構文エラー : 識別子 'XnPoseDetectionStatus'
1>c:\program files\openni\include\xncppwrapper.h(4841): error C2061: 構文エラー : 識別子 'XnPoseDetectionStatus'
1>c:\program files\openni\include\xncppwrapper.h(4614): error C3861: 'xnIsPoseSupported': 識別子が見つかりませんでした
1>c:\program files\openni\include\xncppwrapper.h(4619): error C2065: 'eStatus' : 定義されていない識別子です。
1>c:\program files\openni\include\xncppwrapper.h(4619): error C2065: 'eState' : 定義されていない識別子です。
1>c:\program files\openni\include\xncppwrapper.h(4619): error C3861: 'xnGetPoseStatus': 識別子が見つかりませんでした
1>c:\program files\openni\include\xncppwrapper.h(4643): error C3861: 'xnStopSinglePoseDetection': 識別子が見つかりませんでした
1>c:\program files\openni\include\xncppwrapper.h(4698): error C3861: 'xnRegisterToPoseDetected': 識別子が見つかりませんでした
1>c:\program files\openni\include\xncppwrapper.h(4718): error C3861: 'xnRegisterToOutOfPose': 識別子が見つかりませんでした
1>c:\program files\openni\include\xncppwrapper.h(4733): error C3861: 'xnUnregisterFromPoseDetected': 識別子が見つかりませんでした
1>c:\program files\openni\include\xncppwrapper.h(4742): error C3861: 'xnUnregisterFromOutOfPose': 識別子が見つかりませんでした
1>c:\program files\openni\include\xncppwrapper.h(4768): error C3861: 'xnRegisterToPoseDetectionInProgress': 識別子が見つかりませんでした
1>c:\program files\openni\include\xncppwrapper.h(4786): error C3861: 'xnUnregisterFromPoseDetectionInProgress': 識別子が見つかりませんでした
1>c:\program files\openni\include\xncppwrapper.h(4843): error C2065: 'pCookie' : 定義されていない識別子です。
1>c:\program files\openni\include\xncppwrapper.h(4847): error C2065: 'poseErrors' : 定義されていない識別子です。
1>c:\program files\openni\include\xncppwrapper.h(4993): error C3861: 'xnRegisterToUserExit': 識別子が見つかりませんでした
1>c:\program files\openni\include\xncppwrapper.h(5011): error C3861: 'xnUnregisterFromUserExit': 識別子が見つかりませんでした
1>c:\program files\openni\include\xncppwrapper.h(5027): error C3861: 'xnRegisterToUserReEnter': 識別子が見つかりませんでした
1>c:\program files\openni\include\xncppwrapper.h(5045): error C3861: 'xnUnregisterFromUserReEnter': 識別子が見つかりませんでした
1>c:\program files\openni\include\xncppwrapper.h(5253): error C3861: 'xnMockRawSetData': 識別子が見つかりませんでした
1>c:\program files\openni\include\xncppwrapper.h(5322): error C3861: 'xnScriptNodeGetSupportedFormat': 識別子が見つかりませんでした
1>c:\program files\openni\include\xncppwrapper.h(5327): error C3861: 'xnLoadScriptFromFile': 識別子が見つかりませんでした
1>c:\program files\openni\include\xncppwrapper.h(5332): error C3861: 'xnLoadScriptFromString': 識別子が見つかりませんでした
1>c:\program files\openni\include\xncppwrapper.h(5537): error C3861: 'xnContextRunXmlScriptEx': 識別子が見つかりませんでした
1>c:\program files\openni\include\xncppwrapper.h(5565): error C3861: 'xnContextRunXmlScriptFromFileEx': 識別子が見つかりませんでした
1>c:\program files\openni\include\xncppwrapper.h(5601): error C3861: 'xnInitFromXmlFileEx': 識別子が見つかりませんでした
1>c:\program files\openni\include\xncppwrapper.h(5631): error C3861: 'xnContextOpenFileRecordingEx': 識別子が見つかりませんでした
1>c:\program files\openni\include\xncppwrapper.h(5631): fatal error C1003: プログラム内のエラーが 100 個を超えました。コンパイルは中断されます。
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========