翻转存储在 F# 中的一维数组中的 2D "image"



我正在使用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]

相关内容

最新更新