首页 > 解决方案 > 使用 Kinect C# 从红外位图中裁剪人脸图像

问题描述

我正在尝试从 Kinect 获取 png 格式的头部/面部图像,以便稍后处理面部图像。我可以使用以下方法计算人脸颜色坐标:

var face = faceFrame.FaceBoundingBoxInColorSpace;

double x = face.Left;
double y = face.Top;
double w = face.Right - face.Left;
double h = face.Bottom - face.Top;
..additional padding to get face bounds
return new Rect(x, y, w, h);

我使用返回的值来裁剪 colorBitmap 并将其存储在我的驱动器上。

var Headbounds = ComputeHeadBounds();
var CroppedImage = colorBitmap.Crop(Headbounds);
//Save Image..

当我尝试类似获取红外人脸图像时,它无法正常工作。我得到一个黑色的图像。

var face = faceFrame.FaceBoundingBoxInInfraredSpace;

double x = face.Left;
double y = face.Top;
double w = face.Right - face.Left;
double h = face.Bottom - face.Top;

var coordinates = ComputeInfraredHeadBounds();
var InfraCroppedImage = infraBitmap.Crop(coordinates);

//Saving FaceImage

PngBitmapEncoder encoder = new PngBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(InfraCroppedImage));

using (var fs = new FileStream(projectDirectory + filename + ".png", FileMode.Create, FileAccess.Write))
{
encoder.Save(fs);
}

标签: c#wpfimage-processingkinectkinect-v2

解决方案


我尝试了很多事情,包括锁定位图,但这也没有用。最后,我发现一旦我将红外图像保存在驱动器上,然后尝试对其进行裁剪,它就可以成功运行。我保存了程序生成的所有图像以及用于裁剪的坐标,然后运行了一个单独的过程来裁剪它们。


推荐阅读