Kinect v2の各CameraSpacePointのRGB値を取得しようとしています。私はCameraSpacePointsとColorピクセルを取得することができます。しかし、CameraSpacePointからColorピクセルへのマッピングが私のコードで壊れているようで、IndexOutOfRangeExceptionにつながっているようです。インデックスがKinect v2の配列境界外にありました
データ収集部分を示す以下のコードを参照してください。
var depthWidth = depthFrame.FrameDescription.Width;
var depthHeight = depthFrame.FrameDescription.Height;
ushort[] depthData = new ushort[depthWidth * depthHeight];
var colorWidth = colorFrame.FrameDescription.Width;
var colorHeight = colorFrame.FrameDescription.Height;
byte[] pixels = new byte[colorWidth * colorHeight * 4];
CameraSpacePoint[] cameraSpacePoints = new CameraSpacePoint[depthData.Length];
ColorSpacePoint[] colorSpacePoints = new ColorSpacePoint[depthData.Length];
depthFrame.CopyFrameDataToArray(depthData);
coordinateMapper.MapDepthFrameToCameraSpace(depthData, cameraSpacePoints);
coordinateMapper.MapDepthFrameToColorSpace(depthData, colorSpacePoints);
// Assuming RGBA format here
colorFrame.CopyConvertedFrameDataToArray(pixels, ColorImageFormat.Rgba);
ColorSpacePointsからRGB値を示す以下のコードを参照してください。
for (var index = 0; index < depthData.Length; index++)
{
var u = colorSpacePoints[index].X;
var v = colorSpacePoints[index].Y;
int pixelsBaseIndex = (int)(v * depthWidth + u);
byte red = pixels[4 * pixelsBaseIndex + 0];
byte green = pixels[4 * pixelsBaseIndex + 1];
byte blue = pixels[4 * pixelsBaseIndex + 2];
byte alpha = pixels[4 * pixelsBaseIndex + 3];
}
上記のコードは、エラー以下の投げています。
IndexOutOfRangeException: Index was outside the bounds of the array.
問題をデバッグするために、 nは以下のように最小値と最大インデックス値を計算:
List<int> allIndex = new List<int>();
for (var index = 0; index < depthData.Length; index++)
{
var u = colorpoints[index].X;
var v = colorpoints[index].Y;
int pixelsBaseIndex = (int)(v * depthWidth + u);
allIndex.Add(pixelsBaseIndex);
}
var maxIndex = allIndex.Max();
var minIndex = allIndex.Min();
Console.WriteLine(minIndex);//Prints -2147483648
Console.WriteLine((maxIndex < pixels.Length) && (minIndex >= 0));//Prints False
驚くべき最小インデックスが-2147483648です。どんな推測?私はここで何かを見逃していますか?
[何がjava.lang.ArrayIndexOutOfBoundsExceptionを引き起こし、どのように防止するのですか?](https://stackoverflow.com/questions/5554734/what-causes-a-java-lang-arrayindexoutofboundsexception-and-どのように - 私 - 防止 - それ) – Progman