void GeneratePointCloud(DepthGenerator& rDepthGen, const XnDepthPixel* pDepth, VISION_DATA &pData) { DepthMetaData mDepthMD; rDepthGen.GetMetaData(mDepthMD); pData.timeStamp = mDepthMD.Timestamp(); unsigned int uPointNum = mDepthMD.FullXRes() * mDepthMD.FullYRes(); XnPoint3D* pDepthPointSet = new XnPoint3D[uPointNum]; unsigned int i, j, idxshift, idx; for( j = 0; j < mDepthMD.FullYRes(); ++j) { idxshift = j * mDepthMD.FullXRes(); for(i = 0; i < mDepthMD.FullXRes(); ++i) { idx = idxshift + i; pDepthPointSet[idx].X = i; pDepthPointSet[idx].Y = j; pDepthPointSet[idx].Z = pDepth[idx]; } } XnPoint3D* p3DPointSet = new XnPoint3D[uPointNum]; rDepthGen.ConvertProjectiveToRealWorld(uPointNum, pDepthPointSet, p3DPointSet); memcpy(pData.pointCloud, p3DPointSet, uPointNum*3*sizeof(float)); delete[] pDepthPointSet; delete[] p3DPointSet; }
int OpencvModule::DrawDepth(DepthMetaData& g_depthMD){ if (!cvGetWindowHandle("Caremedia Kinect Viewer")) // if(window has been closed) { if (windowopened) {windowopened=false; return 0; } else windowopened = true; } int key=0; //for opencv Mat, accessing buffer Mat depth16(480,640,CV_16UC1,(unsigned short*)g_depthMD.WritableData()); depth16.convertTo(depth8,CV_8U,-255/4096.0,255); Pseudocolor->pseudocolor(depth8,rgbdepth); //CvFont font; //cvInitFont(&font, CV_FONT_HERSHEY_SIMPLEX, 1.0, 1.0, 0, 1, CV_AA); float aux=((float)g_depthMD.Timestamp())/1E6; QVariant time_double(aux); QTime t = videostarttime.addSecs((int)aux).addMSecs((int)(aux - (int)aux ) * 1000); float percent = (float)100*(float)g_depthMD.FrameID() / (float)NumFrames; QString a; putText(rgbdepth,"Time:"+t.toString().toStdString(), cvPoint(460,30),5,1,cvScalar(255, 255, 255, 0),1,1); putText(rgbdepth, a.setNum(percent,'f',2).append("%").toStdString(), cvPoint(5,30),6,0.6,cvScalar(255, 255, 255, 0),1,1); imshow("Caremedia Kinect Viewer",rgbdepth); key = waitKey(5); }