我知道AVFoundation及其捕获支持(虽然不太熟悉)。但是,我没有看到任何易于访问的API来获取逐像素数据(每像素RGB或类似数据)。我记得在文档中读到这是可能的,但我真的不知道如何。所以:
答案 0 :(得分:31)
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处理更快的方法。
答案 1 :(得分:-4)
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);
}