如何从视频中提取矩形和非矩形区域?

时间:2013-03-16 20:22:31

标签: c# kinect

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

faceTracking

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

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

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

谢谢,

1 个答案:

答案 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]何时在区域内的必要几何计算,则类似的方法将起作用;但即使在那之后,我也没有任何关于如何将它存储在传统数据结构中的线索。

希望这有帮助。