我正在与Kinect合作,我正在尝试深入了解并处理它。
基本上,当我从Kinect处理深度帧时,我想要保存2 - 玩家和后面的前深度数据。然后我需要翻转后面的数据,以便它可以用来构建播放器的3D模型。
我遇到的问题是翻回这些数据。
我有一个长度为一维阵列(320 * 240 = 76800)的深度数据,我正计划翻转每一行(阵列中的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())
depths数组包含我试图翻转的数据,但是,这段代码使翻转的数组完全由0组成。
有人能发现我做错了吗?
由于
答案 0 :(得分:4)
首先,请注意,您不需要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)
。
答案 1 :(得分:1)
如果我理解正确,行索引不变,每行的数据应相反:
for row=0 to 239 do
for col=0 to 319 do
flipped.[320*row+col] <- depths.[320*row+319-col]