none
很多问题,放置在一起问 RRS feed

  • 问题

  • 小弟最近在做KINECT的毕业设计,遇到了很多问题,请不吝赐教!

    1.运行KINECT sdk中的例程 KINECT EXPLORER时候,可以正常获取深度图像,帧数在20左右;但是获取彩色流数据的帧数几乎没有,1帧每秒。

    2.根据《Kinect应用开发实践:用最自然的方式与机器对话》一书的例程,无法获得深度数据,所有的深度数据都是0;

    3.在想要把所获得的颜色流显示出来的时候,VS报错,提示“缓冲区不足”,请问这个怎么办?

    附上代码:

    问题2的代码

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using Microsoft.Kinect;

    namespace DepthMartix
    {
        class Program
        {
            static void Main(string[] args)
            {
                if (KinectSensor.KinectSensors.Count > 0)
                {
                    Console.ForegroundColor = ConsoleColor.Green;
                    Console.WriteLine("Welcome");

                    KinectSensor _kinect = KinectSensor.KinectSensors[0];

                    _kinect.DepthStream.Enable();
                    _kinect.DepthFrameReady += _kinect_DepthFrameReady;
                    _kinect.Start();

                    while (Console.ReadKey().Key != ConsoleKey.Enter)
                    { }

                    _kinect.Stop();
                    Console.WriteLine("EXIT");

                }
                else
                {
                    Console.WriteLine("PLEASE CONNECT");
                }
            }

            static void _kinect_DepthFrameReady(object sender, DepthImageFrameReadyEventArgs e)
            {
                using (DepthImageFrame frame = e.OpenDepthImageFrame())
                {
                    short[] depthData = new short[frame.PixelDataLength];
                    foreach (short pixel in depthData)
                    {
                        Console.Write(pixel);
                    }
                }
            }
        }
    }

    问题3的代码

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Data;
    using System.Windows.Documents;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Imaging;
    using System.Windows.Navigation;
    using System.Windows.Shapes;
    using Microsoft.Kinect;

    namespace ColorStream
    {
        /// <summary>
        /// MainWindow.xaml 的交互逻辑
        /// </summary>
        public partial class MainWindow : Window
        {
            public MainWindow()
            {
                InitializeComponent();
            }
            KinectSensor _kinect;
            private void StartKinect()
            {
                if (KinectSensor.KinectSensors.Count > 0)
                {
                    _kinect = KinectSensor.KinectSensors[0];
                    MessageBox.Show("KINECT状态是"+_kinect.Status);

                    //初始化
                    _kinect.ColorStream.Enable(ColorImageFormat.RawBayerResolution640x480Fps30);
                    _kinect.SkeletonStream.Enable();
                    _kinect.DepthStream.Enable(DepthImageFormat.Resolution320x240Fps30);

                    _kinect.AllFramesReady += _kinect_AllFramesReady;
                    _kinect.Start();


                }
            }
            

            void _kinect_AllFramesReady(object sender, AllFramesReadyEventArgs e)
            {
                using (ColorImageFrame  frame = e.OpenColorImageFrame())
                {
                    if (frame == null)
                    {
                        return;
                    }
                    byte[] pixels = new byte[frame.PixelDataLength];
                    frame.CopyPixelDataTo(pixels);

                    int stride = frame.Width * 4;

                    Camera.Source = BitmapSource.Create(frame.Width, frame.Height, 96, 96, PixelFormats.Bgr32, null, pixels, stride);

                }
            }

            private void Window_Loaded(object sender, RoutedEventArgs e)
            {
                StartKinect();
            }
        }
    }

    2014年4月28日 14:35