相关疑难解决方法(0)

从CVPixelBufferRef获取RAW Bayer像素数据

我正在使用AVCaptureSession&AVCapturePhotoOutput以格式从设备的相机捕获RAW照片数据kCVPixelFormatType_14Bayer_RGGB.

我已经获得了AVCapturePhotoCaptureDelegate回调中的原始照片样本缓冲区:

func capture(captureOutput: AVCapturePhotoOutput,
             didFinishProcessingRawPhotoSampleBuffer rawSampleBuffer: CMSampleBuffer?,
             previewPhotoSampleBuffer: CMSampleBuffer?,
             resolvedSettings: AVCaptureResolvedPhotoSettings,
             bracketSettings: AVCaptureBracketedStillImageSettings?,
             error: Error?) {

  guard let rawSampleBuffer = rawSampleBuffer else { return }

  guard let pixelBuffer = CMSampleBufferGetImageBuffer(rawSampleBuffer) else { return }
}
Run Code Online (Sandbox Code Playgroud)

我现在正试图按照这个问题的答案来获取像素值,CVPixelBufferRef但是当使用14位拜耳RGGB像素格式而不是答案中提到的32位RGB格式时,我无法弄清楚如何做到这一点.

image-processing ios cvpixelbuffer

8
推荐指数
1
解决办法
554
查看次数

如何将CVPixelBufferGetBaseAddress调用转换为Swift?

也许我是第一个在Swift中这样做的人,但在网上使用&/ inout以及swint中的uint8_t似乎没什么.有人可以翻译吗?这种关系是否按位?

Objective-C的

uint8_t *buf=(uint8_t *) CVPixelBufferGetBaseAddress(cvimgRef);
Run Code Online (Sandbox Code Playgroud)

快速尝试

let inout buf:uint8_t = SOMETHING HERE CVPixelBufferGetBaseAddress(cvimgRef)
Run Code Online (Sandbox Code Playgroud)

objective-c swift

4
推荐指数
1
解决办法
2121
查看次数

如何在iOS 9中使用Swift从CMSampleBuffer中提取像素数据进行处理?

我正在Swift中编写一个应用程序,它使用Scandit条形码扫描SDK.SDK允许您直接访问相机框架并将框架作为CMSampleBuffer提供.他们提供Objective-C中的文档,我无法在Swift中工作.我不知道问题是在移植代码,还是样本缓冲区本身存在问题,可能是由于Core Media自生成文档以来发生了变化.

他们的API公开框架如下(Objective-C):

interface YourViewController () <SBSProcessFrameDelegate>
...
- (void)barcodePicker:(SBSBarcodePicker*)barcodePicker
      didProcessFrame:(CMSampleBufferRef)frame
              session:(SBSScanSession*)session {
    // Process the frame yourself.
}
Run Code Online (Sandbox Code Playgroud)

从SO的几个答案构建,我尝试用以下方法处理框架:

let imageBuffer = CMSampleBufferGetImageBuffer(frame)!
CVPixelBufferLockBaseAddress(imageBuffer, 0)
let baseAddress = CVPixelBufferGetBaseAddress(imageBuffer)

let width = CVPixelBufferGetWidth(imageBuffer)
let height = CVPixelBufferGetHeight(imageBuffer)
let bytesPerRow = CVPixelBufferGetBytesPerRow(imageBuffer)

let colorSpace = CGColorSpaceCreateDeviceRGB()
let bitmapInfo = CGBitmapInfo(rawValue: CGImageAlphaInfo.NoneSkipFirst.rawValue | CGBitmapInfo.ByteOrder32Little.rawValue)
let context = CGBitmapContextCreate(baseAddress, width, height, 8, bytesPerRow, colorSpace, bitmapInfo.rawValue)

let quartzImage = CGBitmapContextCreateImage(context)
CVPixelBufferUnlockBaseAddress(imageBuffer,0)

let image = UIImage(CGImage: quartzImage!)
Run Code Online (Sandbox Code Playgroud)

但是,这失败了:

Jan 29 09:01:30  Scandit[1308] <Error>: CGBitmapContextCreate: …
Run Code Online (Sandbox Code Playgroud)

image objective-c core-media ios swift

4
推荐指数
1
解决办法
2146
查看次数

DepthData - 获取每像素深度数据(CVPixelBuffer数据分析)

现在我AVDepthPhotoFilter从iPhone7Plus的立体相机中运行Rendering Depth Deta.

所以,我想访问每像素深度数据,但是,我不知道该怎么做.请指教.

swift cvpixelbuffer iphone7plus ios11

2
推荐指数
1
解决办法
1264
查看次数