翻转存储在F#中的1D数组中的2D“图像”

时间:2011-11-03 15:03:52

标签: f# kinect

我正在与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组成。

有人能发现我做错了吗?

由于

2 个答案:

答案 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]