使用Kinect C#VS 2013保存颜色框架

时间:2014-07-08 22:57:53

标签: c# visual-studio opencv visual-studio-2013 kinect

我目前正在尝试不仅保存骨架数据,还要保存彩色图像,以便进行后期处理。目前,这是处理彩色视频的代码部分,并在UI中输出彩色图像。我想,这是必须保存彩色图像的地方。

private void ColorFrameEvent(ColorImageFrameReadyEventArgs colorImageFrame)
{
    //Get raw image
    using (ColorImageFrame colorVideoFrame = colorImageFrame.OpenColorImageFrame())
    {
        if (colorVideoFrame != null)
        {
            //Create array for pixel data and copy it from the image frame
            Byte[] pixelData = new Byte[colorVideoFrame.PixelDataLength];
            colorVideoFrame.CopyPixelDataTo(pixelData);

            //Set alpha to 255
            for (int i = 3; i < pixelData.Length; i += 4)
            {
                pixelData[i] = (byte)255;
            }

            using (colorImage.GetBitmapContext())
            {
                colorImage.FromByteArray(pixelData);
            }
        }
    }
}

我试过阅读OpenCV,EmguCV和多线程;但我很困惑。在一个地方有一个很好的解释会很好。但是,我觉得最好的方法是在不丢失每秒帧数的情况下执行此操作,可能是将所有图像保存在数组列表中,然后在程序完成时进行一些后处理以转换数组 - &gt; images-&gt ;视频在Matlab中。

有人可以评论我如何实现将彩色图像流保存到文件中吗?

1 个答案:

答案 0 :(得分:0)

如果一切顺利,ColorImageFrameReady事件每秒触发30秒(30fps)。我认为一次保存每张照片都相当沉重。

我建议您使用Backgroundworker,您可以检查工作人员是否正忙,如果不是只是将字节传递给后台工作人员并做出您的魔法。

您可以轻松地从字节[]保存或制作图像。只是谷歌这个。

http://www.codeproject.com/Articles/15460/C-Image-to-Byte-Array-and-Byte-Array-to-Image-Conv

How to compare two images using byte arrays