2013-03-16 105 views
0

我正在开发使用Kinect的面部跟踪应用程序,我有如下的输出。如何提取视频的矩形和非矩形区域?

faceTracking

我想要做的是提取物中的确切脸区域,无论是黄色内衬区域或红色的长方形,这将是巨大的,如果你能告诉我怎么做都。基本上,我期待只有感兴趣的区域输出黑色,否则。

现在我把所有的点的坐标,我需要,但我不知道的类和方法来使用的。

请注意,我用的视频帧的工作,如果这有什么差别。

谢谢

回答

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(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]为区域内识别的几何计算;但即使在那之后,我也不知道如何将其存储在传统的数据结构中。

希望这会有所帮助。