我从 TrueDepth 相机获取深度数据,并将其转换为灰度图像。(我意识到我可以将 传递AVDepthData
给CIImage
构造函数,但是,出于测试目的,我想确保我的数组被正确填充,因此手动构造图像将确保是这种情况。)
我注意到当我尝试转换灰度图像时,我得到了奇怪的结果。即图像出现在上半部分,而下半部分失真(有时显示图像两次,有时显示胡说八道)。
例如:
预期输出(即
CIImage(depthData: depthData)
):
实际输出(20% 的时间):
实际输出(80% 的时间):
我从Apple 的示例代码开始,尝试提取 CVPixelBuffer 中的像素。
let depthDataMap: CVPixelBuffer = ...
let width = CVPixelBufferGetWidth(depthDataMap) // 640
let height = CVPixelBufferGetHeight(depthDataMap) // 480
let bytesPerRow = CVPixelBufferGetBytesPerRow(depthDataMap) // 1280
let baseAddress = CVPixelBufferGetBaseAddress(depthDataMap)
assert(kCVPixelFormatType_DepthFloat16 == CVPixelBufferGetPixelFormatType(depthDataMap))
let byteBuffer = unsafeBitCast(baseAddress, to: UnsafeMutablePointer<Float16>.self)
var pixels = [Float]()
for row in 0..<height {
for col in 0..<width {
let byteBufferIndex = col + row * bytesPerRow
let distance = byteBuffer[byteBufferIndex]
pixels += [distance]
}
}
// TODO: render pixels as a grayscale image
知道这里有什么问题吗?