kinect を使用しているときに、ビットマップとその深度情報が信頼できず、何らかの理由で実際のバイト配列のデータよりもはるかに乱れていることがわかりました。
このようにビットマップにアクセスして最小値と最大値を取得しようとしたときにこれに気付きました
for (var y = 0; y < height; y++)
{
var heightOffset = y * width;
for (var x = 0; x < width; x++)
{
var index = ((width - x - 1) + heightOffset) * 4;
var distance = GetDistance(depth[depthIndex], depth[depthIndex + 1]);
しかし、一方で、この方法で深さバイト配列に直接アクセスすると、はるかに優れた結果が得られました (Stackoverflow メンバーのクリスが指摘したように、ありがとう、クリス)。
int min2 = int.MaxValue, max2 = int.MinValue;
for (int i = 0; i < depth.Length; i += 2)
{
int dist = GetDistance(depth[i], depth[i + 1]);
if (dist < min2 && dist > 0)
min2 = dist;
if (dist > max2)
max2 = dist;
}
私の質問は:
- 特定の距離間隔内のすべてのポイントをカウントしたい。
- 次に、実際の位置(x、y)を取得したいと思います。
位置を取得したり、それらのポイントをリストに直接追加したりするにはどうすればよいですか?
私の最終的な目標は、特定の間隔内のピクセル数を数えることによって、特定の事前定義されたオブジェクトを識別することです (たとえば、ボールとブロックを区別するため)。
for (int i = 0; i < depth.Length; i += 2)
{
int dist = GetDistance(depth[i], depth[i + 1]);
if (dist < z2 && dist > z1)
a++;
}