我目前正在使用Project Tango平板电脑来避免机器人避障。我想创建一个z值矩阵,就像它们出现在Tango屏幕上一样,以便可以使用OpenCV处理该矩阵。当我说z值时,我的意思是每个点到探戈的距离。但是,我不知道如何从TangoXyzIjData中提取z值并将这些值组织到一个矩阵中。这是我到目前为止的代码:
public void action(TangoPoseData poseData, TangoXyzIjData depthData) {
byte[] buffer = new byte[depthData.xyzCount * 3 * 4];
FileInputStream fileStream = new FileInputStream(
depthData.xyzParcelFileDescriptor.getFileDescriptor());
try {
fileStream.read(buffer, depthData.xyzParcelFileDescriptorOffset, buffer.length);
fileStream.close();
} catch (IOException e) {
e.printStackTrace();
}
Mat m = new Mat(depthData.ijRows, depthData.ijCols, CvType.CV_8UC1);
m.put(0, 0, buffer);
}
有谁知道如何做到这一点?我非常感谢您的帮助。
最佳答案
简短的答案是它无法做到,至少不是简单的。 Tango API中的XYZij结构尚未完全起作用。没有“ij”数据。您对缓冲区的检索将按照编码的方式进行。内容是一组用于测量深度点的X,Y,Z值,每个回调大约10000+。每个X,Y和Z值都是float类型,因此不是CV_8UC1。问题在于这些点没有以任何方式排序,因此它们不对应于“图像”或xy栅格。它们是深度点的随机列表。有多种方法可以使它们按xy顺序排列,但这并不简单。我都做了这两个:
要么
关于opencv - 如何将TangoXyxIjData转换为z值矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29524129/