0

我正在使用AVCaptureVideoDataOutput. 我检查了 captureOutput 中的 pixelBuffer:

- (void)captureOutput:(AVCaptureOutput *)captureOutput
     didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer
     fromConnection:(AVCaptureConnection *)connection {

    CVImageBufferRef pixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer);

如果我在像素缓冲区中找到我想要的东西,那么我想保存这个图像以供以后图像处理。

我看到三个选项,我想知道哪个最好用:

  1. 我可以保存sampleBuffer或复制它
  2. 我可以保存pixelBuffer或复制它
  3. 我可以制作一个CGImagepixelBuffer保存它,然后当我需要进行图像处理时,我可以CGBitmapContextGetData()用来取回位图以进行操作。似乎这里有一堆不需要的副本,我可以不用。

哪一种是保存位图以供以后处理的首选方法?我不需要保存位图超过几分钟,即不需要保存到文件系统。如果答案是 1 或 2,那么我可以只保留缓冲区还是需要通过mallocand来复制它们memcpy

4

1 回答 1

0

我这样做 3) 但您必须将像素缓冲区复制到新分配的内存中,因为它仅在您处于该回调的短暂时刻有效。我使用该技术每秒抓取 30 帧。

于 2012-09-20T11:24:12.860 回答