यह Microsoft.Research.Kinect.Nui.SkeletonEngine वर्ग का उपयोग कर विंडोज पुस्तकालय के लिए Kinect के भीतर के लिए catered है, और निम्न विधि:
public Vector DepthImageToSkeleton (
float depthX,
float depthY,
short depthValue
)
इस विधि गहराई छवि द्वारा उत्पादित मैप कर देंगे असली दुनिया माप के आधार पर, किनेक्ट वेक्टर स्केलेबल है।
:
वहाँ (जब मैं अतीत में एक जाल बना लिया है) से, Kinect गहराई छवि के द्वारा बनाई गई बिटमैप में बाइट सरणी की गणना के बाद, आप वेक्टर की एक नई सूची निम्न के समान अंक बनाने
var width = image.Image.Width;
var height = image.Image.Height;
var greyIndex = 0;
var points = new List<Vector>();
for (var y = 0; y < height; y++)
{
for (var x = 0; x < width; x++)
{
short depth;
switch (image.Type)
{
case ImageType.DepthAndPlayerIndex:
depth = (short)((image.Image.Bits[greyIndex] >> 3) | (image.Image.Bits[greyIndex + 1] << 5));
if (depth <= maximumDepth)
{
points.Add(nui.SkeletonEngine.DepthImageToSkeleton(((float)x/image.Image.Width), ((float)y/image.Image.Height), (short)(depth << 3)));
}
break;
case ImageType.Depth: // depth comes back mirrored
depth = (short)((image.Image.Bits[greyIndex] | image.Image.Bits[greyIndex + 1] << 8));
if (depth <= maximumDepth)
{
points.Add(nui.SkeletonEngine.DepthImageToSkeleton(((float)(width - x - 1)/image.Image.Width), ((float)y/image.Image.Height), (short)(depth << 3)));
}
break;
}
greyIndex += 2;
}
}
ऐसा करके, इसका अंतिम परिणाम मिलीमीटर में संग्रहीत वैक्टरों की एक सूची है, और यदि आप सेंटीमीटर 100 (आदि) से गुणा करना चाहते हैं।
धन्यवाद लुईस! ठीक वही है जो मैं बाद में था, हालांकि मैं अभी भी गहराई मूल्य प्राप्त करने के लिए बिट्सफिफ्टिंग व्यवसाय को समझ नहीं पा रहा हूं। –
मेरा मानना है कि DepthImageToSkeleton विधि को KinectSensor ऑब्जेक्ट पर MapDepthToSkeletonPoint पर रीफैक्टर किया गया है –
बस रिकॉर्ड के लिए: http://arena.openni.org/OpenNIArena/Applications/ViewApp.aspx?app_id=426 – EdgarT