swift - Swift:将灰度图像转换为包含视差的 CVPixelBuffer
问题描述
我有一个深度数据的灰度图像,该图像已从其原始分辨率上采样。我不知道如何将放大的深度图像(r,g,b)的像素值转换为浮点数。
有没有办法将像素的白度级别转换为浮点值?
无论如何我可以转换与图像关联的 CVPixelBuffer 的 CVPixelBufferFormatTypes 吗?
换句话说,有没有办法将灰度图像的像素缓冲区转换为包含视差浮动的 CVpixelbuffer?
我使用以下代码从上采样深度数据的 cgimage 表示中提取 cvpixelbuffer:-
func pixelBuffer() -> CVPixelBuffer? {
let frameSize = CGSize(width: self.width, height: self.height)
//COLOR IS BGRA
var pixelBuffer:CVPixelBuffer? = nil
let status = CVPixelBufferCreate(kCFAllocatorDefault, Int(frameSize.width), Int(frameSize.height), kCVPixelFormatType_32BGRA , nil, &pixelBuffer)
if status != kCVReturnSuccess {
return nil
}
CVPixelBufferLockBaseAddress(pixelBuffer!, CVPixelBufferLockFlags.init(rawValue: 0))
let data = CVPixelBufferGetBaseAddress(pixelBuffer!)
let rgbColorSpace = CGColorSpaceCreateDeviceRGB()
let bitmapInfo = CGBitmapInfo(rawValue: CGBitmapInfo.byteOrder32Big.rawValue | CGImageAlphaInfo.premultipliedFirst.rawValue)
let context = CGContext(data: data, width: Int(frameSize.width), height: Int(frameSize.height), bitsPerComponent: 8, bytesPerRow: CVPixelBufferGetBytesPerRow(pixelBuffer!), space: rgbColorSpace, bitmapInfo: bitmapInfo.rawValue)
context?.draw(self, in: CGRect(x: 0, y: 0, width: self.width, height: self.height))
CVPixelBufferUnlockBaseAddress(pixelBuffer!, CVPixelBufferLockFlags(rawValue: 0))
return pixelBuffer
}
解决方案
推荐阅读
- java - 如何在 docker 文件中为 docker 映像提供参数,使其在 Apple M1 机器中仍然有效
- api - 如果 Odoo 和移动应用程序通信的最佳方法
- node.js - 在 Nodejs 上使用 axios 执行时出现 UnhandledPromiseRejectionWarning 错误
- javascript - 将 fetch 转换为 ajax 以用于条带集成
- javascript - 如何在 javascript 原型的控制台中调用函数?
- php - 安装 SSL 证书后 Wordpress 网站无法正常工作
- python-3.x - 如何为多个仪器创建 alpha 值(线性回归截距)矩阵
- algorithm - 这个程序的运行时间是多少?
- r - ggCyto 错误:get 错误(名称,envir = asNamespace(pkg),继承 = FALSE):找不到对象“update_theme”
- java - 在遇到订阅后,下游需求不会向上游传播