我正在使用Kinect开发面部跟踪应用程序,我的输出如下。
我想要做的是提取精确的面部区域,无论是黄色衬里区域还是红色矩形区域,如果您能告诉我如何做到这两点,那将会很棒。基本上,我期望输出只有感兴趣的区域,否则为黑色。
现在我拥有了我需要的所有点坐标,但我不确定使用哪个类和方法。
请注意,我正在使用视频帧,如果它有任何区别。
谢谢,
答案 0 :(得分: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
数组是1维的,元素从底部开始行排列(最后一行,然后是最后一行之前的行,......)。像这样使用嵌套的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]何时在区域内的必要几何计算,则类似的方法将起作用;但即使在那之后,我也没有任何关于如何将它存储在传统数据结构中的线索。
希望这有帮助。