【问题标题】:convert Kinect depth image to EmguCV image error将 Kinect 深度图像转换为 EmguCV 图像错误
【发布时间】:2013-08-05 07:44:46
【问题描述】:

我刚开始使用 EmguCV 进行 Kinect 图像处理,从深度流创建 EmguCV 图像时出现 ArgumentException,如下所示:

    private void DepthFrameReady(object sender, DepthImageFrameReadyEventArgs e)
    {
        DepthImageFrame df = e.OpenDepthImageFrame();
        if (df != null)
        {
            short[] data = new short[df.PixelDataLength];
            df.CopyPixelDataTo(data);
            Bitmap b = data.ToBitMap(df.Width, df.Height, System.Drawing.Imaging.PixelFormat.Format16bppGrayScale);
            Image<Gray, short> im = new Image<Gray, short>(b); //run-time exception here

ToBitmap 扩展方法完全复制自 Kinect SDK 教程示例:

    public static Bitmap ToBitmap(this short[] data, int width, int height, System.Drawing.Imaging.PixelFormat format)
    {
        var bitmap = new Bitmap(width, height, format);

        var bitmapData = bitmap.LockBits(
            new System.Drawing.Rectangle(0, 0, bitmap.Width,
            bitmap.Height),
            ImageLockMode.WriteOnly,
            bitmap.PixelFormat);
        Marshal.Copy(data, 0, bitmapData.Scan0, data.Length);
        bitmap.UnlockBits(bitmapData);
        return bitmap;
    }

我检查了b 有一个有效值,而不是空值。不知道为什么会出现这个异常,是不是图片格式问题?

【问题讨论】:

    标签: c# kinect emgucv


    【解决方案1】:

    尝试使用:

    Image<Gray, byte> im = new Image<Gray, byte>(b);
    

    【讨论】:

    • 我已经发现 b 无效,当我将位图的格式更改为 rgb565 时,它与 &lt;Gray, byte&gt; 一起工作。但是如果我需要保持 16 位精度该怎么办?听说bitmap不支持16bit灰度,因为没有16bit的显卡,是真的吗?现在我正在尝试使用&lt;Gray, short&gt;作为中等格式,然后再次将数据复制到short[],然后直接将short[]转换为BitmapSource,我将测试这是否有效。一样的感谢
    猜你喜欢
    • 2014-06-15
    • 1970-01-01
    • 2014-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-24
    • 1970-01-01
    相关资源
    最近更新 更多