2013-02-28 87 views
3

我在使用iPhone或iPad上的OpenGL ES查找任何有关裁剪图像的文档时遇到困难。使用OpenGL ES 2.0 iOS裁剪(与使用核心图像相比)

具体来说,我以一种轻微快速的速度(20 FPS)捕捉视频帧,并且需要快速的东西来裁剪图像。这里使用OpenGL是否可行?如果是这样,它会比使用Core Image及其相关方法裁剪更快吗?

看来,使用核心图像方法,我不能达到比约10-12 FPS输出更快,我正在寻找一种方法来达到20.任何建议或指针使用OpenGL的呢?

+0

你可能不想自己做所有的OpenGL ES代码,你可以看看这个:https://github.com/BradLarson/GPUImage 。特别是,GPUImageCropFilter应该做你想做的。 – 2013-03-01 03:26:10

+0

@BradLarson嘿是的,我仔细看了一下你的代码,我不得不说我的工作给我留下了深刻的印象。关于使用您的实现方式,我唯一遇到的问题是它是否适用于实时视频馈送 - 仅仅因为它被归类为图像过滤器。我不确定它是否打算以我需要的方式使用。你会说它可以以这种方式使用吗?肯定会为我节省很多头痛.. – bgoers 2013-03-01 04:33:06

+1

它的唯一目的是用摄像头的实时视频进行操作。我在这里有一些基准:http://stackoverflow.com/a/6628208/19679(我需要更新iOS 6.0)。构建并运行FilterShowcase示例,了解它如何执行实时视频。裁剪滤镜可能是最快的,所以它应该在iPhone 4上以约25-30 FPS的速度裁剪和录制720p视频,以及在4S以上以30 FPS的速度录制1080p视频。 – 2013-03-01 04:38:30

回答

3

显然,使用OpenGl ES会比Core Image Framework快。裁剪图像将被设置纹理来完成坐标,以一般,纹理坐标总是这样,

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

整个图像将与纹理被drawed坐标之上。如果你只是想要一个图像的右上部分,您可以设置纹理坐标这样,

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

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

+0

好吧,现在假设我有一个从CIFaceDetector计算出来的矩形,我想我只是规范了坐标吗?我从来没有真正使用过OpenGL,因此有什么资源可以指向我在哪里我可以看到实际从旧纹理和一组坐标渲染新纹理? – bgoers 2013-02-28 01:58:15

+1

@bgoers是的,您首先将从CIFaceDetector得到的矩形与归属的原始大小进行归一化,然后获得纹理坐标。使用OpenGl ES渲染纹理,您可以从我的开源程序** Camera **(https://github.com/zhzhy/Camera)获得帮助,或从developer.apple.com下载演示,例如RosyWriter,GLCameraRipple等T hese程序将帮助您学习熟悉OpenGl ES的用法。 – zhzhy 2013-02-28 02:18:16

+0

谢谢。我会看看它。我将不得不阅读OpenGL了解一些功能! – bgoers 2013-02-28 02:47:25