cv::Mat KinectOpenNI::retrievePointCloudAsImage(const XnDepthPixel *depth) { cv::Mat out(480,640,CV_32FC3,cv::Scalar::all(0)); /* cv::Mat img(480,640,CV_32FC1,cv::Scalar::all(0)); cv::Mat imgx(480,640,CV_32FC1,cv::Scalar::all(0)); cv::Mat imgy(480,640,CV_32FC1,cv::Scalar::all(0));*/ XnPoint3D *cloud = retrievePointCloudMap(depth); memcpy(out.data,cloud,sizeof(float)*480*640); // out*=0.001f; // out = out*0.001f; /* for(int i=0;i<480*640;i++) { img.at<float>(i/640,i%640) = cloud[i].Z*0.001f; imgx.at<float>(i/640,i%640) = cloud[i].X*0.001f; imgy.at<float>(i/640,i%640) = cloud[i].Y*0.001f; }*/ /* std::vector<cv::Mat> planes; planes.push_back(img); planes.push_back(imgx); planes.push_back(imgy); cv::merge(planes,out);*/ return out; }
IplImage* CvCapture_OpenNI::retrieveFrame( int outputType ) { IplImage* image = 0; CV_Assert( outputType < outputMapsTypesCount && outputType >= 0); if( outputType == CV_CAP_OPENNI_DEPTH_MAP ) { image = retrieveDepthMap(); } else if( outputType == CV_CAP_OPENNI_POINT_CLOUD_MAP ) { image = retrievePointCloudMap(); } else if( outputType == CV_CAP_OPENNI_DISPARITY_MAP ) { image = retrieveDisparityMap(); } else if( outputType == CV_CAP_OPENNI_DISPARITY_MAP_32F ) { image = retrieveDisparityMap_32F(); } else if( outputType == CV_CAP_OPENNI_VALID_DEPTH_MASK ) { image = retrieveValidDepthMask(); } else if( outputType == CV_CAP_OPENNI_BGR_IMAGE ) { image = retrieveBGRImage(); } else if( outputType == CV_CAP_OPENNI_GRAY_IMAGE ) { image = retrieveGrayImage(); } return image; }