0

OpenCV と C++ を使用して Kinect のグレーレベルの深度画像を抽出する最も簡単な方法を知っている人はいますか? この分野のソースコードはありますか?

4

3 に答える 3

1

OpenNI SDK を使用している場合は、単純にバッファを指定できます。

//on setup:
xn::DepthGenerator depthGenerator;
xn::DepthMetaData depthMD;
cv::Mat depthWrapper;

//on update loop,
//after context.WaitAnyUpdateAll();
depthGenerator.GetMetaData(depthMD);
depthWrapper = cv::Mat(depthMD.YRes(), depthMD.XRes(), CV_16UC1, (void*) depthMD.Data());

depthWrapperこれは const であるため、操作するにはクローンを作成する必要があることに注意してください

于 2012-06-11T17:02:14.507 に答える
0

ドキュメントには、必要なものがすべて含まれています。これ以上詳しく説明することはできません。

于 2012-06-11T18:59:14.967 に答える
0

2 つのことを行う必要があります (コンテキスト、深度ジェネレーター、および Kinect の初期化について読むことは別として):

  • タイプ CV_16U のマットを作成します。context.WaitOneUpdateAll(depth_map); b. Mdepth_original = Mat(h_depth, w_depth, CV_16U, (void*) depth_map.GetData()) c.次の読み取り時にマットが破棄されるため、マットをコピーします。
  • 深度をグレーまたはカラーにマッピングします。色は良いアイデアのように思えますが (256^3 レベル)、人間の目は輝度の変化により敏感です。256 レベルでも、[ヒストグラム均等化][1] 手法を使用して 10,000 Kinect レベルを適切にマッピングできます。ただし、最も簡単な方法は、精度を下げて I(x, y) = 255.0*z(x, y)/z_range を実行することです。

openNI2 でヒストグラム均等化を実装​​する方法は次のとおりです: https://github.com/OpenNI/OpenNI2/blob/master/Samples/Common/OniSampleUtilities.h

于 2013-11-28T09:20:41.540 に答える