一个菜鸟程序员的觉醒之路 2015-09-10 02:21 采纳率: 0%
浏览 1630

请教大家一个关于vector动态存储的问题

我现在正在写一个关于kinect的小程序,定义了一个

 vector<double>inputvector(12)

,也就是inputvector里面有12个元素,全部初始化为0,现在是我要把我从kinect里面获得的骨骼数据流,总共12个数据每帧这样送到inputvector中去,然后将所有获取到的数据保存到txt文档中,下面我贴出我的代码,现在有一个问题是我只能获取最后一帧的数据保存到txt中,之前所有的帧数据都没有保存进去,求大神帮忙看一下!我基础不好,底子薄 这个问题困扰我一天了!万分感谢!

 bool getSkeletonImage(HANDLE &skeletonEvent, Mat &skeletonImage, Mat &colorImage)
{
    UINT gestureLabel = 1;
    trainingData.setNumDimensions(12);
    trainingData.setDatasetName("sensorData");
    trainingData.setInfoText("this data contains some sensor data");

    NUI_SKELETON_FRAME skeletonFrame = { 0 };
    bool bfoundskeleton = false;

    if (NuiSkeletonGetNextFrame(0, &skeletonFrame) == S_OK)
    {
        for (int i = 0; i < NUI_SKELETON_COUNT; i++)
        {
            if (skeletonFrame.SkeletonData[i].eTrackingState == NUI_SKELETON_TRACKED)
            {
                bfoundskeleton = true;
                break;//跳出for循环
            }
        }
    }
    else
    {
        cout << "没有找到合适的骨骼" << endl;
        return FALSE;



    }
    if (!bfoundskeleton)
    {
        return FALSE;
    }
    NuiTransformSmooth(&skeletonFrame, NULL);
    skeletonImage.setTo(0);

    for (int i = 0; i < NUI_SKELETON_COUNT; i++)
    {
        if (skeletonFrame.SkeletonData[i].eTrackingState == NUI_SKELETON_TRACKED&&skeletonFrame.SkeletonData[i].eSkeletonPositionTrackingState[NUI_SKELETON_POSITION_SHOULDER_CENTER] != NUI_SKELETON_POSITION_NOT_TRACKED)
        {
            float fx, fy;
            for (int j = 0; j < NUI_SKELETON_POSITION_COUNT; j++)
            {
                NuiTransformSkeletonToDepthImage(skeletonFrame.SkeletonData[i].SkeletonPositions[j], &fx, &fy);//骨骼坐标转换到深度图像中去
                skeletonPoint[i][j].x = (int)fx;
                skeletonPoint[i][j].y = (int)fy;
            }
            for (int j = 0; j < NUI_SKELETON_POSITION_COUNT; j++)
            {
                if (skeletonFrame.SkeletonData[i].eSkeletonPositionTrackingState[j] != NUI_SKELETON_POSITION_NOT_TRACKED)
                {
                    LONG colorx, colory;
                    //从深度空间中获取颜色空间对应像素点的坐标
                    NuiImageGetColorPixelCoordinatesFromDepthPixel(NUI_IMAGE_RESOLUTION_640x480, 0, skeletonPoint[i][j].x, skeletonPoint[i][j].y, 0, &colorx, &colory);
                    colorPoint[i][j].x = int(colorx);
                    colorPoint[i][j].y = int(colory);
                    circle(skeletonImage, skeletonPoint[i][j], 4, cvScalar(0, 255, 255), 1, 8, 0);
                    circle(colorImage, colorPoint[i][j], 4, cvScalar(0,0,255), 1, 8, 0);
                }
            }
            drawskeleton(colorImage, colorPoint[i], i);//在彩色图像上画上骨骼
            drawskeleton(skeletonImage, skeletonPoint[i], i);//画出骨骼图像信息

            inputvector[0] = skeletonFrame.SkeletonData[i].SkeletonPositions[NUI_SKELETON_POSITION_HAND_LEFT].x;
            inputvector[1] = skeletonFrame.SkeletonData[i].SkeletonPositions[NUI_SKELETON_POSITION_HAND_LEFT].y;
            inputvector[2] = skeletonFrame.SkeletonData[i].SkeletonPositions[NUI_SKELETON_POSITION_HAND_LEFT].z;
            inputvector[3] = skeletonFrame.SkeletonData[i].SkeletonPositions[NUI_SKELETON_POSITION_WRIST_LEFT].x;
            inputvector[4] = skeletonFrame.SkeletonData[i].SkeletonPositions[NUI_SKELETON_POSITION_WRIST_LEFT].y;
            inputvector[5] = skeletonFrame.SkeletonData[i].SkeletonPositions[NUI_SKELETON_POSITION_WRIST_LEFT].z;
            inputvector[6] = skeletonFrame.SkeletonData[i].SkeletonPositions[NUI_SKELETON_POSITION_HAND_RIGHT].x;
            inputvector[7] = skeletonFrame.SkeletonData[i].SkeletonPositions[NUI_SKELETON_POSITION_HAND_RIGHT].y;
            inputvector[8] = skeletonFrame.SkeletonData[i].SkeletonPositions[NUI_SKELETON_POSITION_HAND_RIGHT].z;
            inputvector[9] = skeletonFrame.SkeletonData[i].SkeletonPositions[NUI_SKELETON_POSITION_WRIST_RIGHT].x;
            inputvector[10] = skeletonFrame.SkeletonData[i].SkeletonPositions[NUI_SKELETON_POSITION_WRIST_RIGHT].y;
            inputvector[11] = skeletonFrame.SkeletonData[i].SkeletonPositions[NUI_SKELETON_POSITION_WRIST_RIGHT].z;

            cout << "KinectLeftHandData:" << "X=" << inputvector[0] << " Y=" << inputvector[1] << " Z=" << inputvector[2] << endl;
            cout << "KinectLeftWristData: " << "X=" << inputvector[3] << "Y=" << inputvector[4] << "Z=" << inputvector[5] << endl;
            cout << "KinectRightHandData:" << "X=" << inputvector[6] << " Y=" << inputvector[7] << " Z=" << inputvector[8] << endl;
            cout << "KinectRightWristData:" << "X=" << inputvector[9] << " Y=" << inputvector[10] << " Z=" << inputvector[11] << endl;
            //cout << inputvector.size() << endl;

        trainingData.addSample(gestureLabel, inputvector);
        }
    if (!trainingData.save("TrainingData.txt"))
        {
            cout << "error:failed to save dateset to file!" << endl;
            return EXIT_FAILURE;
        }
        string datasetName = trainingData.getDatasetName();
        string infoText = trainingData.getInfoText();
        UINT numSamples = trainingData.getNumSamples();
        UINT numDimensions = trainingData.getNumDimensions();
        UINT numClasses = trainingData.getNumClasses();
        ClassificationData testData = trainingData.partition(80);
        if (!trainingData.merge(testData))
        {
            //cout << "failed to save merge datasets" << endl;
            return EXIT_FAILURE;
        }
        trainingData.clear();
    }
}

  • 写回答

3条回答 默认 最新

  • 关注

    我自己的观点是:是不是因为我申请的这个inputvector(12),这个空间的大小就是12啊 然后我每帧送过来的数据存进去,
    下一帧数据过来之后就会覆盖掉我上一帧的数据,所以我最后存入的只能是最后一帧的数据

    评论

报告相同问题?

悬赏问题

  • ¥15 django项目运行报编码错误
  • ¥15 请问这个是什么意思?
  • ¥15 STM32驱动继电器
  • ¥15 Windows server update services
  • ¥15 关于#c语言#的问题:我现在在做一个墨水屏设计,2.9英寸的小屏怎么换4.2英寸大屏
  • ¥15 模糊pid与pid仿真结果几乎一样
  • ¥15 java的GUI的运用
  • ¥15 我想付费需要AKM公司DSP开发资料及相关开发。
  • ¥15 怎么配置广告联盟瀑布流
  • ¥15 Rstudio 保存代码闪退