以下代码在检索第 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 前面 1m 处,它的价值约为。900-1100。但是当我添加以下代码时,我站在 kinect 摄像头前,两者都会产生不同的结果。
uint16_t* depthdata = (uint16_t*)rawdepth.data;
cout << "depthdata is " << depthdata[76800] << endl;
depthdata[76800] 总是产生 0,即使我将 kinect 移动到其他方向。
如果我使用以下代码,并将 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。