简体   繁体   English

获取Kinect v2中每个3D点的RGB值

[英]Get RGB values of each 3D point in Kinect v2

I am getting confused with the Kinect v2 CoordinateMapper API. 我对Kinect v2 CoordinateMapper API感到困惑。 I want to get RGB values of each 3D point aka CameraSpacePoint in Kinect v2. 我想获取Kinect v2中每个3D点又称为CameraSpacePoint的 RGB值。

Please see below the code snippet: 请参见下面的代码片段:

var depthFrame = multiSourceFrame.DepthFrameReference.AcquireFrame();
var colorFrame = multiSourceFrame.ColorFrameReference.AcquireFrame();

var depthWidth = depthFrame.FrameDescription.Width;
var depthHeight = depthFrame.FrameDescription.Height;

ushort[] depthData = new ushort[depthWidth * depthHeight];
CameraSpacePoint[] camerapoints = new CameraSpacePoint[depthData.Length];
ColorSpacePoint[] colorpoints = new ColorSpacePoint[depthData.Length];

depthFrame.CopyFrameDataToArray(depthData);
this.coordinateMapper.MapDepthFrameToCameraSpace(depthData, camerapoints);
this.coordinateMapper.MapDepthFrameToColorSpace(depthData, colorpoints);

The 3D points are stored in camerapoints variable. 3D点存储在camerapoints变量中。 I want to the RGB values of each camerapoints . 我想要每个camerapoints的RGB值。 In other words, please see below pesudo code: 换句话说,请参见下面的伪代码:

RGBPoint[] rgbpoints = new RGBPoint[depthData.Length];
RGBPoint rgbpoint = rgbpoints[0];
int red   = rgbpoint.r
int green = rgbpoint.g
int blue  = rgbpoint.b

As always, thank you very much. 与往常一样,非常感谢。 I really appreciate your kind response. 我非常感谢您的友好答复。

The colorpoints array contains the (x, y) index that corresponds to each pixels in the depthData array. 所述colorpoints阵列包含(x,y)的对应于所述每个像素的索引depthData阵列。 From here, we can just get the color frame data (from colorFrame ) at each specific (x, y) index indicated by colorpoints[index] . 从这里,我们可以只获取由colorpoints[index]指示的每个特定(x,y)索引处的颜色框架数据(来自colorFrame )。

var colorWidth = colorFrame.FrameDescription.Width;
var colorHeight = colorFrame.FrameDescription.Height;

// Assuming BGRA format here
byte[] pixels = new byte[colorWidth * colorHeight * 4];
colorFrame.CopyFrameDataToArray(pixels);

byte[] bgraPoints = new byte[depthWidth * depthHeight * 4];

for (var index = 0; index < depthData.Length; index++)
{
    var u = colorpoints[index].X;
    var v = colorpoints[index].Y;
    if (u < 0 || u >= colorWidth || v < 0 || v >= colorHeight) continue;
    var pixelsBaseIndex = v * colorWidth + u;
    Array.Copy(pixels, 4 * pixelsBaseIndex, bgraPoints, 4 * index, 4);
}

var index = 0;
var red = bgraPoints[4 * index + 2];
var green = bgraPoints[4 * index + 1];
var blue = bgraPoints[4 * index];

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM