F# 翻转一个2D“文件”;“图像”;它存储在F中的一维数组中#
我正在与Kinect合作,试图获取深入的数据并对其进行处理 基本上,当我从Kinect处理深度帧时,我想保存2-播放器的前部深度数据和后部深度数据。然后我需要翻转后面的数据,这样就可以用来构建播放器的3D模型 我遇到的问题是将这些数据向后翻转 我有一个长度为1D的数组(320*240=76800)形式的深度数据,我计划翻转每一行(数组中的320个位置)以反转图像F# 翻转一个2D“文件”;“图像”;它存储在F中的一维数组中#,f#,kinect,F#,Kinect,我正在与Kinect合作,试图获取深入的数据并对其进行处理 基本上,当我从Kinect处理深度帧时,我想保存2-播放器的前部深度数据和后部深度数据。然后我需要翻转后面的数据,这样就可以用来构建播放器的3D模型 我遇到的问题是将这些数据向后翻转 我有一个长度为1D的数组(320*240=76800)形式的深度数据,我计划翻转每一行(数组中的320个位置)以反转图像 let mutable flipped = Array.create (320*240) 0 for y=0 to 239 do
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())
let mutable flipped=Array.create(320*240)0
对于y=0至239 do
对于x=0到319 do
设n=((y)*320+x)
翻转。[n]首先,请注意,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)
首先,请注意,翻转的不需要是可变的,因为您从不重新分配它(您只修改它)
这是问题本身。给定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]
行=0到239 do的
对于col=0至319 do
翻转。[320*行+列]如果我理解正确,行索引将保持不变,每行中的数据应反转:
for row=0 to 239 do
for col=0 to 319 do
flipped.[320*row+col] <- depths.[320*row+319-col]
行=0到239 do的
对于col=0至319 do
翻转。[320*行+列]对于数组,mutable
使引用可变。元素总是可变的。因此,在这种情况下,这是不必要的。您可以用Array.zeroCreate
替换Array.create\u0
。啊,感谢大家提供的提示,他们仍在努力掌握f!非常感谢数组,mutable
使引用可变。元素总是可变的。因此,在这种情况下,这是不必要的。您可以用Array.zeroCreate
替换Array.create\u0
。啊,感谢大家提供的提示,他们仍在努力掌握f!非常有用,非常感谢,非常感谢。我总是认为编程中最难破解的问题(无论如何对我来说)是那些你已经盯着看了好几天的愚蠢错误,让自己相信你看不到错误!谢谢,太好了,非常感谢。我总是认为编程中最难破解的问题(无论如何对我来说)是那些你已经盯着看了好几天的愚蠢错误,让自己相信你看不到错误!谢谢