我正在使用Kinect,我正在尝试获取深度数据并处理它。
基本上,当我处理来自Kinect的深度帧时,我想要保存2—玩家的正面和背面深度数据。然后,我需要翻转后面的数据,这样它就可以用来建立一个玩家的3D模型。
我遇到的问题是把这些数据倒过来。
我有一个长度为(320*240 = 76800)的1D数组形式的深度数据,我打算翻转每一行(数组中的320个位置)来反转图像。
let mutable flipped = Array.create (320*240) 0
for y=0 to 239 do
for x=0 to 319 do
let n = ((y)* 320 + x)
flipped.[n] <- depths.[(320*(y+1))-(n+1)]
System.Diagnostics.Debug.WriteLine("DepthsMax:" + Array.max(depths).ToString())
System.Diagnostics.Debug.WriteLine("FlippedMax:" + Array.max(flipped).ToString())
深度数组包含我试图翻转的数据,然而,这段代码使翻转的数组完全由0组成。
有人能指出我做错了什么吗?
谢谢
首先,注意您不需要将flipped
更改为可变的,因为您从不重新分配它(您只修改它)。
回到问题本身。给定n = 320*y + x
,您正在查看索引:
320 * (y+1) - n - 1
= 320 * y + 320 - (320 * y + x) - 1
= 319 - x
因此,您只访问第一行的数据。您希望访问索引y*320 + (319-x)
或320*(y+1) - (x+1)
,而不是320*(y+1) - (n+1)
。
如果我理解正确的话,行索引是不变的,每行中的数据应该是相反的:
for row=0 to 239 do
for col=0 to 319 do
flipped.[320*row+col] <- depths.[320*row+319-col]