iOS:从相机获取逐像素数据

Posted

技术标签:

【中文标题】iOS:从相机获取逐像素数据【英文标题】:iOS: Get pixel-by-pixel data from camera 【发布时间】:2012-06-02 19:05:03 【问题描述】:

我知道 AVFoundation 及其捕获支持(虽然不太熟悉)。但是,我没有看到任何易于访问的 API 来获取逐像素数据(每像素 RGB 或类似数据)。我确实记得在文档中读到这是可能的,但我真的不知道如何。所以:

    可以这样做吗?如果有,怎么做? 我会获取原始图像数据还是 JPEG 压缩数据?

【问题讨论】:

【参考方案1】:

AV Foundation 可以为您返回由视频或静态相机捕获的图像的原始字节。您需要使用适当的 AVCaptureDevice 以及相应的 AVCaptureDeviceInput 和 AVCaptureDeviceOutput(AVCaptureVideoDataOutput 或 AVCaptureStillImageOutput)设置 AVCaptureSession。 Apple 在他们的文档中有一些这个过程的例子,它需要一些样板代码来配置。

配置好捕获会话并从相机捕获数据后,您将设置一个-captureOutput:didOutputSampleBuffer:fromConnection: 委托方法,其中一个参数是 CMSampleBufferRef。这将在其中包含一个 CVImageBufferRef,您可以通过CMSampleBufferGetImageBuffer() 访问它。在该像素缓冲区上使用CVPixelBufferGetBaseAddress() 将返回代表相机帧的原始像素数据的字节数组的基地址。这可以是几种不同的格式,但最常见的是 BGRA 和平面 YUV。

我有一个使用此here 的示例应用程序,但我建议您也看看my open source framework,它封装了标准的 AV Foundation 样板,可以轻松地在 GPU 上执行图像处理。根据你想用这些原始相机字节做什么,我可能已经有了一些你可以在那里使用的东西,或者一种比在 CPU 上处理更快的方法。

【讨论】:

终于解决了这个问题……您在此处发布的代码确实很有帮助:***.com/a/11615472/472768 谢谢! 你能解释一下在这种情况下我应该在输入这个函数时提供什么吗? AlprResults recognize(unsigned char* pixelData, int bytesPerPixel, int imgWidth, int imgHeight, std::vector<AlprRegionOfInterest> regionsOfInterest); 我只了解pixelDataregionsOfInterest 的观点。 @SashaKid - 我不知道那个函数是做什么的,这听起来像是一个完全独立的问题。 @BradLarson 你能帮忙从 GPUImage2 获取颜色吗?目前,我已经完成了从 SolidColorGenerator 到 RenderView 的平均颜色输出。但我不知道如何从中获取 UIColor 。你能帮帮我吗? @WINSergey - 如果您只需要平均颜色,AverageColorExtractor 将提供一个回调,返回平均颜色的 RGBA 分量。如果您需要屏幕上特定像素的颜色,您可以附加 RawDataOutput 来提取图像的原始字节并提取与您想要的像素对应的字节。【参考方案2】:
 lowp vec4 textureColor = texture2D(inputImageTexture, textureCoordinate);
 float luminance = dot(textureColor.rgb, W);

 mediump vec2 p = textureCoordinate;
 if (p.x == 0.2 && p.x<0.6 && p.y > 0.4 && p.y<0.6) 
     gl_FragColor = vec4(textureColor.r * 1.0, textureColor.g * 1.0, textureColor.b * 1.0, textureColor.a);
  else 
   gl_FragColor = vec4(textureColor.r * 0.0, textureColor.g * 0.0, textureColor.b * 0.0, textureColor.a *0.0);
 

【讨论】:

以上是关于iOS:从相机获取逐像素数据的主要内容,如果未能解决你的问题,请参考以下文章

从相机意图中获取像素的颜色

从相机获取每个像素的深度

从实时相机预览中获取特定像素的颜色 - Ionic

从相机设备获取号码

Fabric.js 逐像素操作 Image 对象以改变颜色

Fabric.js 逐像素操作 Image 对象以改变颜色