次のコードは、行 240 と列 320 の深さの値を取得する際にうまく機能します。
capture.retrieve( rawdepth, CV_CAP_OPENNI_DEPTH_MAP); // Mat rawdepth(Size(640,480), CV_16UC1);
cout << "rows: " << rawdepth.rows << " cols: " << rawdepth.cols << endl;
cout << "depth is " << rawdepth.at<unsigned short>(rawdepth.rows/2,rawdepth.cols/2) << endl;
Kinect の前に 1 メートルの距離で立った場合、約 1 の値が得られます。900-1100。しかし、この次のコードを追加して、kinect カメラの前に立つと、どちらも異なる結果になります。
uint16_t* depthdata = (uint16_t*)rawdepth.data;
cout << "depthdata is " << depthdata[76800] << endl;
kinect を他の方向に向けても、depthdata[76800] は常に 0 になります。
次のコードを使用し、Kinect を平らな壁に向けると、(rawdepth.rows/2,rawdepth.cols/2) は depthdata[78600] と同じ結果になります。
uint16_t* depthdata = (uint16_t*)rawdepth.data;
cout << "depthdata is " << depthdata[78600] << endl;
私の質問は、76800 の depthdata が (rawdepth.rows/2, rawdepth.cols/2) と等しくない場合、何ですか? 240*320 から 76800 を得ました。