我正在使用AVCaptureVideoDataOutput
从相机获取图像。我检查了captureOutput中的pixelBuffer:
- (void)captureOutput:(AVCaptureOutput *)captureOutput
didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer
fromConnection:(AVCaptureConnection *)connection {
CVImageBufferRef pixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer);
如果我在pixelBuffer中找到了我想要的内容,那么我想要保存此图像以便以后进行图像处理。
我看到三种选择,我想知道哪种选择最好:
sampleBuffer
或制作副本pixelBuffer
或制作副本CGImage
创建pixelBuffer
并保存,稍后当我需要进行图像处理时,我可以使用CGBitmapContextGetData()
取回位图进行操作。看起来这里有一堆不需要的副本,我可以不用。哪个是保存位图以供以后处理的首选方法?我不需要保存位图超过几分钟,即无需保存到文件系统。如果答案是1或2,那么我可以保留缓冲区,还是需要通过执行malloc
和memcpy
来复制它们?
答案 0 :(得分:0)
我做3)但你必须将像素缓冲区复制到新的malloced内存中,因为它只对你在回调中的短暂时刻有效。我使用这种技术每秒抓取30帧。