void kinectSkelApp::mouseUp( MouseEvent event ) { writeImage( getHomeDirectory() + "kinect_color.png", mKinect.getColorImage() ); writeImage( getHomeDirectory() + "kinect_depth.png", mKinect.getDepthImage() ); // set tilt to random angle mKinect.setLedColor( Kinect::LED_YELLOW ); }
void HandTrackingApp::update() { if( mKinect.checkNewDepthFrame() ){ ImageSourceRef depthImage = mKinect.getDepthImage(); // make a texture to display mDepthTexture = depthImage; // make a surface for opencv mDepthSurface = depthImage; if(mDepthSurface){ // once the surface is avalable pass it to opencv // had trouble here with bit depth. surface comes in full color, needed to crush it down cv::Mat input( toOcv( Channel8u( mDepthSurface ) ) ), blurred, thresholded, thresholded2, output; cv::blur(input, blurred, cv::Size(10,10)); // make two thresholded images one to display and one // to pass to find contours since its process alters the image cv::threshold( blurred, thresholded, mThreshold, 255, CV_THRESH_BINARY); cv::threshold( blurred, thresholded2, mThreshold, 255, CV_THRESH_BINARY); // 2d vector to store the found contours vector<vector<cv::Point> > contours; // find em cv::findContours(thresholded, contours, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_SIMPLE); // convert theshold image to color for output // so we can draw blobs on it cv::cvtColor( thresholded2, output, CV_GRAY2RGB ); // loop the stored contours for (vector<vector<cv::Point> >::iterator it=contours.begin() ; it < contours.end(); it++ ){ // center abd radius for current blob cv::Point2f center; float radius; // convert the cuntour point to a matrix vector<cv::Point> pts = *it; cv::Mat pointsMatrix = cv::Mat(pts); // pass to min enclosing circle to make the blob cv::minEnclosingCircle(pointsMatrix, center, radius); cv::Scalar color( 0, 255, 0 ); if (radius > mBlobMin && radius < mBlobMax) { // draw the blob if it's in range cv::circle(output, center, radius, color); //update the target position mTargetPosition.x = 640 - center.x; mTargetPosition.y = center.y; mTargetPosition.z = 0; } } mCvTexture = gl::Texture( fromOcv( output ) ); } } if( mKinect.checkNewColorFrame() ) mColorTexture = mKinect.getColorImage(); if( mKinectTilt != mKinect.getTilt() ) mKinect.setTilt( mKinectTilt ); }