我知道 AVFoundation 及其捕获支持(虽然不太熟悉)。但是,我没有看到任何易于访问的 API 来获取逐像素数据(每像素 RGB 或类似数据)。我确实记得在文档中读过这是可能的,但我真的不明白如何做到。所以:
- 这可以做到吗?如果是这样,怎么办?
- 我会获取原始图像数据还是 JPEG 压缩的数据?
AV Foundation 可以向您返回视频或静态相机捕获的图像的原始字节。您需要使用适当的 AVCaptureDevice 和相应的 AVCaptureDeviceInput 和 AVCaptureDeviceOutput(AVCaptureVideoDataOutput 或 AVCaptureStillImageOutput)设置 AVCaptureSession。 Apple 在其文档中提供了此过程的一些示例,并且需要一些样板代码进行配置。
配置捕获会话并从相机捕获数据后,您将设置一个-captureOutput:didOutputSampleBuffer:fromConnection:
委托方法,其中参数之一是 CMSampleBufferRef。其中将有一个 CVImageBufferRef ,您可以通过以下方式访问CMSampleBufferGetImageBuffer()
. Using CVPixelBufferGetBaseAddress()
该像素缓冲区将返回表示相机帧的原始像素数据的字节数组的基地址。它可以采用几种不同的格式,但最常见的是 BGRA 和平面 YUV。
我有一个使用它的示例应用程序here http://www.sunsetlakesoftware.com/sites/default/files/ColorTracking.zip,但我建议您也看看我的开源框架 https://github.com/BradLarson/GPUImage它封装了标准 AV Foundation 样板,可以轻松在 GPU 上执行图像处理。根据您想要对这些原始相机字节执行的操作,我可能已经有一些您可以在那里使用的东西,或者一种比 CPU 上处理更快的方法。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)