Example #1
0
        public void SetData(IplImage image)
        {
            var bufferHandle = GCHandle.Alloc(textureBuffer, GCHandleType.Pinned);
            var bufferHeader = new IplImage(image.Size, 8, 4, bufferHandle.AddrOfPinnedObject());

            ImgProc.cvCvtColor(image, bufferHeader, ColorConversion.BGR2RGBA);
            bufferHandle.Free();

            update = true;
        }
Example #2
0
        void CaptureNewFrame()
        {
            while (running)
            {
                using (var depthFrame = kinect.DepthStream.OpenNextFrame(50))
                    using (var colorFrame = kinect.ColorStream.OpenNextFrame(50))
                        using (var skeletonFrame = kinect.SkeletonStream.OpenNextFrame(50))
                        {
                            if (depthFrame != null && colorFrame != null && skeletonFrame != null)
                            {
                                // Keep depth as managed array
                                var depthImageBuffer = new short[depthFrame.PixelDataLength];
                                //if (depthImageBuffer == null || depthImageBuffer.Length != depthFrame.PixelDataLength)
                                //{
                                //    depthImageBuffer = new short[depthFrame.PixelDataLength];
                                //}

                                if (colorImageBuffer == null || colorImageBuffer.Length != colorFrame.PixelDataLength)
                                {
                                    colorImageBuffer = new byte[colorFrame.PixelDataLength];
                                }

                                var skeletonData = new Skeleton[skeletonFrame.SkeletonArrayLength];
                                skeletonFrame.CopySkeletonDataTo(skeletonData);
                                colorFrame.CopyPixelDataTo(colorImageBuffer);
                                depthFrame.CopyPixelDataTo(depthImageBuffer);

                                // Flip color image to get proper measurements
                                var bufferHandle = GCHandle.Alloc(colorImageBuffer, GCHandleType.Pinned);
                                var colorImage   = new IplImage(new CvSize(colorFrame.Width, colorFrame.Height), colorFrame.BytesPerPixel * 8 / 4, 4, bufferHandle.AddrOfPinnedObject());
                                var colorOutput  = new IplImage(colorImage.Size, colorImage.Depth, 3);
                                ImgProc.cvCvtColor(colorImage, colorOutput, ColorConversion.BGRA2BGR);
                                Core.cvFlip(colorOutput, colorOutput, FlipMode.Horizontal);
                                bufferHandle.Free();

                                //bufferHandle = GCHandle.Alloc(depthImageBuffer, GCHandleType.Pinned);
                                //var depthImage = new IplImage(new CvSize(depthFrame.Width, depthFrame.Height), depthFrame.BytesPerPixel * 8, 1, bufferHandle.AddrOfPinnedObject());
                                //var depthOutput = new IplImage(depthImage.Size, depthImage.Depth, 1);
                                //Core.cvCopy(depthImage, depthOutput);
                                //Core.cvFlip(depthOutput, depthOutput, FlipMode.Horizontal);
                                //bufferHandle.Free();

                                //**** Flip depth horizontally ****
                                //bufferHandle = GCHandle.Alloc(depthImageBuffer, GCHandleType.Pinned);
                                //var depthImage = new IplImage(new CvSize(depthFrame.Width, depthFrame.Height), depthFrame.BytesPerPixel * 8, 1, bufferHandle.AddrOfPinnedObject());
                                //Core.cvFlip(depthImage, depthImage, FlipMode.Horizontal);
                                //bufferHandle.Free();

                                Subject.OnNext(new KinectFrame(kinect, depthImageBuffer, colorOutput, skeletonData));
                            }
                        }
            }

            stop.Set();
        }