0

我正在使用 Kinect 开发面部跟踪应用程序,并且输出如下。

人脸追踪

我想要做的是提取确切的面部区域,无论是黄线区域还是红色矩形,如果你能告诉我如何做这两者会很棒。基本上,我期望输出只有感兴趣的区域,否则为黑色。

现在我有我需要的所有点坐标,但我不确定要使用哪个类和方法。

请注意,我正在使用视频帧,如果它有任何区别。

谢谢,

4

1 回答 1

0

我没有在 C# 中这样做,但是在 C++ 中,运行这样的东西会生成一个 RGB 值数组:

const XnRGB24Pixel *pImage = imageMD->RGB24Data(); // generate array
XnRGB24Pixel pixelRGB = *pImage; // get the first element of array
byte red = pixelRGB.nRed // read the RED value

该数组是一维的,元素从底部开始逐行存储(最后一行,然后是最后一行之前的行,...)。像这样使用嵌套的 for 循环遍历它们会给你想要的矩形区域:

for(int y = RECTANGLE_Y1; y < RECTANGLE_Y2; y++)
{
    for(int x = RECTANGLE_X1; x < RECTANGLE_x2; x++)
    {
        pixelRGB = pImage[y*RESOLUTION_WIDTH + x]; // get the element
        // work with pixelRGB
    }
}

将 RECTANGLE_X1 和 RECTANGLE_Y1 替换为矩形左下边缘坐标的坐标,将 RECTANGLE_X2 和 RECTANGLE_Y2 替换为右上边缘坐标。

为了获取非矩形区域内的像素值,如果您能够计算出识别给定 [x,y] 何时在该区域内所需的几何计算,则类似的方法将起作用;但即使在那之后,我也不知道如何将它存储在传统的数据结构中。

希望这可以帮助。

于 2013-03-17T23:57:46.747 回答