我正在使用 Kinect 开发面部跟踪应用程序,并且输出如下。
我想要做的是提取确切的面部区域,无论是黄线区域还是红色矩形,如果你能告诉我如何做这两者会很棒。基本上,我期望输出只有感兴趣的区域,否则为黑色。
现在我有我需要的所有点坐标,但我不确定要使用哪个类和方法。
请注意,我正在使用视频帧,如果它有任何区别。
谢谢,
我没有在 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] 何时在该区域内所需的几何计算,则类似的方法将起作用;但即使在那之后,我也不知道如何将它存储在传统的数据结构中。
希望这可以帮助。