将Kinect深度图像转换为EmguCV图像错误
本文关键字:图像 EmguCV 错误 转换 深度 深度图 Kinect | 更新日期: 2023-09-27 18:26:21
我刚开始使用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
是否有一个有效的值,而不是null。我想知道为什么会出现这种异常,是不是图像格式有问题?
尝试使用:
Image<Gray, byte> im = new Image<Gray, byte>(b);