Objective c 使用OpenGL ES 2.0 iOS进行裁剪(与使用核心图像相比)

Objective c 使用OpenGL ES 2.0 iOS进行裁剪(与使用核心图像相比),objective-c,cocoa-touch,opengl-es,avfoundation,core-image,Objective C,Cocoa Touch,Opengl Es,Avfoundation,Core Image,我很难在iPhone或iPad上找到关于使用OpenGL ES裁剪图像的文档 具体来说,我正在以稍微快一点的速度(每秒20帧)捕获视频帧,需要一些快速的东西来裁剪图像。在这里使用OpenGL可行吗?如果是这样,它会比使用核心图像及其相关方法进行裁剪更快吗 似乎使用核心图像方法,我无法实现快于10-12 FPS的输出,我正在寻找一种达到20 FPS的方法。有任何关于使用OpenGL的建议吗?显然,使用OpenGL ES将比核心图像框架更快。裁剪图像将通过设置纹理坐标来完成,通常纹理坐标总是这样 {

我很难在iPhone或iPad上找到关于使用OpenGL ES裁剪图像的文档

具体来说,我正在以稍微快一点的速度(每秒20帧)捕获视频帧,需要一些快速的东西来裁剪图像。在这里使用OpenGL可行吗?如果是这样,它会比使用核心图像及其相关方法进行裁剪更快吗


似乎使用核心图像方法,我无法实现快于10-12 FPS的输出,我正在寻找一种达到20 FPS的方法。有任何关于使用OpenGL的建议吗?

显然,使用OpenGL ES将比核心图像框架更快。裁剪图像将通过设置纹理坐标来完成,通常纹理坐标总是这样

{
0.0f,1.0f,
1.0f,1.0f,
0.0f,0.0f,
1.0f.0.0f
}
{
0.5f,1.0f,
1.0f,1.0f,
0.5f,0.5f,
1.0f.0.5f
}
整个图像将用上面的纹理坐标绘制。如果只需要图像的右上部分,可以像这样设置纹理坐标

{
0.0f,1.0f,
1.0f,1.0f,
0.0f,0.0f,
1.0f.0.0f
}
{
0.5f,1.0f,
1.0f,1.0f,
0.5f,0.5f,
1.0f.0.5f
}

这将在右上角获得整个图像的四分之一。你永远不会忘记OpenGl ES的坐标原点在左下角

好的,现在假设我有一个从
CIFaceDetector
计算出的rect,我想我应该规范化坐标?我从来没有真正使用过OpenGL,那么您有没有什么资源可以告诉我,在哪里可以从旧纹理和一组坐标中实际渲染新纹理?@bgoers是的,您首先将从CIFaceDetector获得的rect规格化为纹理的原始大小,然后您可以获得纹理坐标。如何使用OpenGl ES渲染纹理您可以从我的开源程序Camera获得帮助,或从developer.apple.com下载演示,如RosyWriter、GLCameraRipple等。这些程序将帮助您学习熟悉OpenGl ES的使用。谢谢。我来看看。我将不得不读一点OpenGL来理解一些函数!与自己编写所有OpenGL ES代码不同,您可能希望查看以下内容:。特别是,GPUImageCropFilter应该做你想做的。@BradLarson嘿,是的,我仔细看过你的代码,我不得不说你的工作给我留下了深刻的印象。关于使用您的实现,我唯一感到矛盾的是,它是否能够与实时视频提要一起工作——这仅仅是因为它被归类为图像过滤器。我不确定它是否打算以我需要的方式使用。你认为它可以这样使用吗?这肯定会帮我省去很多麻烦。写这篇文章的唯一目的就是通过摄像机对现场视频进行操作。我这里有一些基准:(我需要为iOS 6.0更新这些基准)。构建并运行FilterShowcase示例,以了解它对实时视频的执行情况。裁剪过滤器可能是其中最快的,因此它应该在iPhone4上以每秒25-30帧的速度裁剪并录制720p视频,在4S及以上的手机上以每秒30帧的速度裁剪并录制1080p视频。哇。太棒了。我甚至不需要720p视频,我正在使用352x288预设图像大小减少。你是救命恩人@BradLarson事实上在经历了很多烦躁和测试之后,我不知道GPUImage在这方面有什么帮助。人脸检测只是使设备速度过慢。我没有裁剪静态区域-它是动态的,由
CIFaceDetector
结果决定。如果在样例中注意到人脸检测,则渲染时长方体的帧速率较慢。我把这归因于
CIFaceDetector
的缓慢,而不是我所做的任何图像处理。这是悲剧,但哦,好吧:(