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); }
void inpaintDepth(DepthMetaData *niDepthMD, bool halfSize) { IplImage *depthIm, *depthImFull; if (halfSize) { depthImFull = cvCreateImage(cvSize(niDepthMD->XRes(), niDepthMD->YRes()), IPL_DEPTH_16U, 1); depthImFull->imageData = (char*)niDepthMD->WritableData(); depthIm = cvCreateImage(cvSize(depthImFull->width/4.0, depthImFull->height/4.0), IPL_DEPTH_16U, 1); cvResize(depthImFull, depthIm, 0); } else { depthIm = cvCreateImage(cvSize(niDepthMD->XRes(), niDepthMD->YRes()), IPL_DEPTH_16U, 1); depthIm->imageData = (char*)niDepthMD->WritableData(); } IplImage *depthImMask = cvCreateImage(cvGetSize(depthIm), IPL_DEPTH_8U, 1); for (int y=0; y<depthIm->height; y++) { for (int x=0; x<depthIm->width; x++) { CV_IMAGE_ELEM(depthImMask, char, y, x)=CV_IMAGE_ELEM(depthIm, unsigned short,y,x)==0?255:0; } } IplImage *depthImMaskInv = cvCreateImage(cvGetSize(depthIm), IPL_DEPTH_8U, 1); cvNot(depthImMask, depthImMaskInv); double min, max; cvMinMaxLoc(depthIm, &min, &max, 0, 0, depthImMaskInv); IplImage *depthIm8 = cvCreateImage(cvGetSize(depthIm), IPL_DEPTH_8U, 1); float scale = 255.0/(max-min); cvConvertScale(depthIm, depthIm8, scale, -(min*scale)); IplImage *depthPaint = cvCreateImage(cvGetSize(depthIm8), IPL_DEPTH_8U, 1); cvInpaint(depthIm8, depthImMask, depthPaint, 3, CV_INPAINT_NS); IplImage *depthIm16 = cvCreateImage(cvGetSize(depthIm), IPL_DEPTH_16U, 1); cvConvertScale(depthPaint, depthIm16, 1/scale, min); if (halfSize) { IplImage *depthPaintedFull = cvCreateImage(cvGetSize(depthImFull), IPL_DEPTH_16U, 1); cvResize(depthIm16, depthPaintedFull,0); IplImage *depthImMaskFull = cvCreateImage(cvGetSize(depthImFull), IPL_DEPTH_8U, 1); for (int y=0; y<depthImFull->height; y++) for (int x=0; x<depthImFull->width; x++) CV_IMAGE_ELEM(depthImMaskFull, char, y, x)=CV_IMAGE_ELEM(depthImFull, unsigned short,y,x)==0?255:0; cvCopy(depthPaintedFull, depthImFull, depthImMaskFull); cvReleaseImage(&depthPaintedFull); cvReleaseImage(&depthImMaskFull); cvReleaseImage(&depthImFull); } else {
XnDepthPixel* KinectControl::getDepth() { XnStatus nRetVal = context.WaitAndUpdateAll(); CHECK_RC(nRetVal, "Update Data"); DepthMetaData depthMD; depth_generator.GetMetaData(depthMD); return depthMD.WritableData(); }