We are about to switch to a new forum software. Until then we have removed the registration on this forum.
Hello,
Recently , I have created a sketch by using PKinect Processing Library...
But , my question is this, when I use the pkinect.GetMask() method which gives the user's contour, how can I make the edged of the user's contour smooth?
Here is my code:
import pKinect.PKinect;
import pKinect.SkeletonData;
PKinect kinect;
ArrayList<SkeletonData> bodies;
void setup()
{
size(640, 480);
kinect = new PKinect(this);
bodies = new ArrayList<SkeletonData>();
smooth();
}
void draw()
{
background(255);
image(kinect.GetMask(), 0, 0);
for (int i=0; i<bodies.size(); i++)
{
drawSkeleton(bodies.get(i));
}
}
void drawSkeleton(SkeletonData _s)
{
// Body
DrawBone(_s,
PKinect.NUI_SKELETON_POSITION_HEAD,
PKinect.NUI_SKELETON_POSITION_SHOULDER_CENTER);
DrawBone(_s,
PKinect.NUI_SKELETON_POSITION_SHOULDER_CENTER,
PKinect.NUI_SKELETON_POSITION_SHOULDER_LEFT);
DrawBone(_s,
PKinect.NUI_SKELETON_POSITION_SHOULDER_CENTER,
PKinect.NUI_SKELETON_POSITION_SHOULDER_RIGHT);
DrawBone(_s,
PKinect.NUI_SKELETON_POSITION_SHOULDER_CENTER,
PKinect.NUI_SKELETON_POSITION_SPINE);
DrawBone(_s,
PKinect.NUI_SKELETON_POSITION_SHOULDER_LEFT,
PKinect.NUI_SKELETON_POSITION_SPINE);
DrawBone(_s,
PKinect.NUI_SKELETON_POSITION_SHOULDER_RIGHT,
PKinect.NUI_SKELETON_POSITION_SPINE);
DrawBone(_s,
PKinect.NUI_SKELETON_POSITION_SPINE,
PKinect.NUI_SKELETON_POSITION_HIP_CENTER);
DrawBone(_s,
PKinect.NUI_SKELETON_POSITION_HIP_CENTER,
PKinect.NUI_SKELETON_POSITION_HIP_LEFT);
DrawBone(_s,
PKinect.NUI_SKELETON_POSITION_HIP_CENTER,
PKinect.NUI_SKELETON_POSITION_HIP_RIGHT);
DrawBone(_s,
PKinect.NUI_SKELETON_POSITION_HIP_LEFT,
PKinect.NUI_SKELETON_POSITION_HIP_RIGHT);
// Left Arm
DrawBone(_s,
PKinect.NUI_SKELETON_POSITION_SHOULDER_LEFT,
PKinect.NUI_SKELETON_POSITION_ELBOW_LEFT);
DrawBone(_s,
PKinect.NUI_SKELETON_POSITION_ELBOW_LEFT,
PKinect.NUI_SKELETON_POSITION_WRIST_LEFT);
DrawBone(_s,
PKinect.NUI_SKELETON_POSITION_WRIST_LEFT,
PKinect.NUI_SKELETON_POSITION_HAND_LEFT);
// Right Arm
DrawBone(_s,
PKinect.NUI_SKELETON_POSITION_SHOULDER_RIGHT,
PKinect.NUI_SKELETON_POSITION_ELBOW_RIGHT);
DrawBone(_s,
PKinect.NUI_SKELETON_POSITION_ELBOW_RIGHT,
PKinect.NUI_SKELETON_POSITION_WRIST_RIGHT);
DrawBone(_s,
PKinect.NUI_SKELETON_POSITION_WRIST_RIGHT,
PKinect.NUI_SKELETON_POSITION_HAND_RIGHT);
// Left Leg
DrawBone(_s,
PKinect.NUI_SKELETON_POSITION_HIP_LEFT,
PKinect.NUI_SKELETON_POSITION_KNEE_LEFT);
DrawBone(_s,
PKinect.NUI_SKELETON_POSITION_KNEE_LEFT,
PKinect.NUI_SKELETON_POSITION_ANKLE_LEFT);
DrawBone(_s,
PKinect.NUI_SKELETON_POSITION_ANKLE_LEFT,
PKinect.NUI_SKELETON_POSITION_FOOT_LEFT);
// Right Leg
DrawBone(_s,
PKinect.NUI_SKELETON_POSITION_HIP_RIGHT,
PKinect.NUI_SKELETON_POSITION_KNEE_RIGHT);
DrawBone(_s,
PKinect.NUI_SKELETON_POSITION_KNEE_RIGHT,
PKinect.NUI_SKELETON_POSITION_ANKLE_RIGHT);
DrawBone(_s,
PKinect.NUI_SKELETON_POSITION_ANKLE_RIGHT,
PKinect.NUI_SKELETON_POSITION_FOOT_RIGHT);
}
void DrawBone(SkeletonData _s, int _j1, int _j2)
{
noFill();
//stroke(255, 255, 0);
if (_s.skeletonPositionTrackingState[_j1] != PKinect.NUI_SKELETON_POSITION_NOT_TRACKED &&
_s.skeletonPositionTrackingState[_j2] != PKinect.NUI_SKELETON_POSITION_NOT_TRACKED) {
line(_s.skeletonPositions[_j1].x*width/2,
_s.skeletonPositions[_j1].y*height/2,
_s.skeletonPositions[_j2].x*width/2,
_s.skeletonPositions[_j2].y*height/2);
}
}
void appearEvent(SkeletonData _s)
{
if (_s.trackingState == PKinect.NUI_SKELETON_NOT_TRACKED)
{
return;
}
synchronized(bodies) {
bodies.add(_s);
}
}
void disappearEvent(SkeletonData _s)
{
synchronized(bodies) {
for (int i=bodies.size()-1; i>=0; i--)
{
if (_s.dwTrackingID == bodies.get(i).dwTrackingID)
{
bodies.remove(i);
}
}
}
}
void moveEvent(SkeletonData _b, SkeletonData _a)
{
if (_a.trackingState == PKinect.NUI_SKELETON_NOT_TRACKED)
{
return;
}
synchronized(bodies) {
for (int i=bodies.size()-1; i>=0; i--)
{
if (_b.dwTrackingID == bodies.get(i).dwTrackingID)
{
bodies.get(i).copy(_a);
break;
}
}
}
}
Answers
(if you post a picture then people without Kinect may be able to contribute)
no help :(
As you see the, edges are not good. I just want to make them smooth..