私はKinectセンサーで作業しています。奥行きとカラーフレームを整列させて、お互いに「収まる」イメージとして保存できるようにしています。私はmsdnフォーラムやKinect SDKの控えめなドキュメンテーションを通して多くの時間を費やしてきました。私は絶対にどこにも行きません。Kinect SDK:奥行きとカラーフレームを整列する
この回答に基づいて:Kinect: Converting from RGB Coordinates to Depth Coordinates
IはdepthData
とcolorData
がNUI_LOCKED_RECT.pBits
とmappedData
から得られる以下の機能を有する深さにマッピングされた新たなカラーフレームを含む出力座標れる:
bool mapColorFrameToDepthFrame(unsigned char *depthData, unsigned char* colorData, unsigned char* mappedData)
{
INuiCoordinateMapper* coordMapper;
// Get coordinate mapper
m_pSensor->NuiGetCoordinateMapper(&coordMapper);
NUI_DEPTH_IMAGE_POINT* depthPoints = new NUI_DEPTH_IMAGE_POINT[640 * 480];
HRESULT result = coordMapper->MapColorFrameToDepthFrame(NUI_IMAGE_TYPE_COLOR, NUI_IMAGE_RESOLUTION_640x480, NUI_IMAGE_RESOLUTION_640x480, 640 * 480, reinterpret_cast<NUI_DEPTH_IMAGE_PIXEL*>(depthData), 640 * 480, depthPoints);
if (FAILED(result))
{
return false;
}
int pos = 0;
int* colorRun = reinterpret_cast<int*>(colorData);
int* mappedRun = reinterpret_cast<int*>(mappedData);
// For each pixel of new color frame
for (int i = 0; i < 640 * 480; ++i)
{
// Find the corresponding pixel in original color frame from depthPoints
pos = (depthPoints[i].y * 640) + depthPoints[i].x;
// Set pixel value if it's within frame boundaries
if (pos < 640 * 480)
{
mappedRun[i] = colorRun[pos];
}
}
return true;
}
このコードを実行すると、depthFrameに情報がないすべてのピクセルが削除された(変更されていない)カラーフレームになります。
は、Windowsの例を符号化するためのKinectでグリーンスクリーンの例をチェックアウトしたことがありますか? http://kinectforwindows.codeplex.com/。それは色と深さを揃えます。 –
はい私は持っています。新しい 'INuiCoordinateMapper'を使用するのではなく、古いメソッド' INuiSensor :: NuiImageGetColorPixelCoordinateFrameFromDepthPixelFrameAtResolution'を使用します。私はそれを試してみたと私のいずれか(私はすべての白いイメージを取得)のために動作しません。どういうわけか、得られる深度値の配列はUSHORT(16ビット)であり、私のものは32ビットです。私はKinectセンサーを異なるパラメーター(深度のみプレーヤーインデックスなし)で初期化するという考えられる理由があります。私が32ビットから16ビット深度の値の配列を作成したとしても、関数は私のためには機能しません。 – jaho
似たようなことがここで解決されました:http://stackoverflow.com/a/19905805/2521214 Kinect SDKには画像を整列させる機能がありますが、私にとってはうまく機能しませんでした(非常に古いバージョンのkinectを持っています)。自分自身...私のキネクト校正データです。自分で測定する必要があります。 – Spektre