1

私は初心者としてopenNIとKinectを初めて使用します。このリンクのOpenNI.orgのチュートリアルを通じてOpenNI SimpleViewerを実装しようとしました: http://openni.org/docs2/Tutorial/smpl_simple_view.html

このチュートリアルで説明されているようにコードを実装しましたが、プログラムが例外をスローしており、出力が表示されないため、まだ問題に直面しています。

すべてのライブラリをリンクし、kinect を適切にインストールしました。また、openNI に OpenCV ライブラリを含めました。

これが私が実装した私のC++コードです:

int main()
{
    rc = context.InitFromXmlFile(XML_PATH,&errors);
    if(rc == XN_STATUS_NO_NODE_PRESENT)
    {
        XnChar strError[1024];
        errors.ToString(strError,1024);
        printf("%s\n",strError);
        return(rc);
    }
    else if(rc != XN_STATUS_OK)
    {
        printf("Open failed : %s\n", xnGetStatusString(rc));
        return(rc);
    }

    rc = context.FindExistingNode(XN_NODE_TYPE_DEPTH,depth);
    if(rc != XN_STATUS_OK)
    {
        printf("No Depth Node Found. Check XML!\n");
        return -1;
    }
    depth.GetMetaData(depthMD);
    image.GetMetaData(imageMD);

    if(imageMD.FullXRes() != depthMD.FullXRes() || imageMD.FullYRes() != depthMD.FullYRes())
    {
        printf("The device depth and image resolution must be equal\n");
        return -1;
    }
    if(imageMD.PixelFormat() != XN_PIXEL_FORMAT_RGB24)
    {
        printf("The Device Image Format must be RGB24\n");
        return -1;
    }

    unsigned short textMapX = (((unsigned short)(depthMD.FullXRes() - 1)/512) + 1 * 512);
    unsigned short textMapY = (((unsigned short)(depthMD.FullYRes() - 1)/512) + 1 * 512);
    XnRGB24Pixel* pTextMap = (XnRGB24Pixel*) malloc(textMapX * textMapY * sizeof(XnRGB24Pixel));
    rc = context.WaitOneUpdateAll(depth);
    depth.GetMetaData(depthMD);
    image.GetMetaData(imageMD);
    const XnDepthPixel* pDepth = depthMD.Data();
    const XnUInt8* pImage = imageMD.Data();
    unsigned int imageScale = GL_WIN_SIZE_X/depthMD.FullXRes();

    xnOSMemSet(depthHist,0,MAX * sizeof(float));
    unsigned int numberOfPoints = 0;
    for(XnUInt y = 0; y < depthMD.YRes(); ++ y)
    {
        for(XnUInt x = 0; x < depthMD.XRes(); ++x, ++pDepth);
        {
            if(*pDepth != 0)
            {
                depthHist[*pDepth]++;
                numberOfPoints++;
            }
        }
    }
    for(int index = 1; index < MAX; index++)
    {
        depthHist[index] += depthHist[index - 1];
    }
    if(numberOfPoints)
    {
        for(int index = 1; index < MAX; index++)
        {
            depthHist[index] = (unsigned int)(256 * (1.0f - (depthHist[index]/numberOfPoints)));
        }
    }
    return 0;
}

コードの後半部分の理解にも問題があります。

4

0 に答える 0