【问题标题】:Cropping Using OpenGL ES 2.0 iOS (vs. using Core Image)使用 OpenGL ES 2.0 iOS 进行裁剪(对比使用 Core Image)
【发布时间】:2013-02-14 01:10:59
【问题描述】:

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

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

似乎使用 Core Image 方法,我无法实现比 10-12 FPS 输出更快的速度,我正在寻找一种达到 20 的方法。对此使用 OpenGL 有什么建议或指示吗?

【问题讨论】:

  • 与其自己编写所有的 OpenGL ES 代码,不如看看这个:github.com/BradLarson/GPUImage。特别是,GPUImageCropFilter 应该做你想做的事。
  • @BradLarson 嘿,是的,我仔细查看了您的代码,我不得不说我对您的工作印象深刻。在使用您的实现方面,我唯一感到矛盾的是它是否适用于实时视频源 - 仅仅是因为它被归类为图像过滤器。我不确定它是否打算以我需要的方式使用。你会说它可以以这种方式使用吗?肯定会省去我很多头痛..
  • 编写它的唯一目的是对来自摄像机的实时视频进行操作。我在这里有一些基准:stackoverflow.com/a/6628208/19679(我需要为 iOS 6.0 更新)。构建并运行 FilterShowcase 示例以查看其对实时视频的执行情况。裁剪滤镜可能是同类中最快的,因此它应该在 iPhone 4 上以约 25-30 FPS 的速度裁剪和录制 720p 视频,在 4S 及更高版本上以稳定的 30 FPS 裁剪和录制 1080p 视频。
  • 哇。那真是太棒了。我什至不需要 720p 视频,我使用 352x288 预设来缩小图像尺寸。你是救命稻草!
  • @BradLarson 实际上经过大量的烦躁和测试,我不知道 GPUImage 在这里有帮助。人脸检测只是让设备减速太多。我没有裁剪静态区域 - 它是动态的,由CIFaceDetector 结果确定。如果您注意到样本中的面部检测,则该框在渲染时的帧速率很慢。我将此归结为CIFaceDetector 的缓慢,而不是我正在做的任何图像处理。这是悲惨的,但哦,好吧:(

标签: objective-c cocoa-touch opengl-es avfoundation core-image


【解决方案1】:

显然,使用 OpenGL ES 会比 Core Image Framework 更快。裁剪图像会通过设置Texture Coordinate来完成,一般来说Texture Coordinate总是这样,

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

整个图像将使用上面的纹理坐标绘制。如果你只想要图片的右上角,你可以像这样设置Texture Coordinate,

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

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

【讨论】:

  • 好的,现在假设我有一个从CIFaceDetector 计算的矩形,我想我只是标准化坐标?我从来没有真正使用过 OpenGL,所以有什么资源可以告诉我我可以从旧纹理和一组坐标中实际渲染新纹理的地方吗?
  • @bgoers 是的,您首先将从 CIFaceDetector 获得的矩形标准化为纹理的原始大小,然后您可以获得纹理坐标。如何使用 OpenGl ES 渲染纹理可以从我的开源程序 Cameragithub.com/zhzhy/Camera 获得帮助,或者从 developer.apple.com 下载演示,例如 RosyWriter、GLCameraRipple 等。这些程序将帮助您学习熟悉 OpenGL ES 的使用。
  • 谢谢。我会看看它。我将不得不阅读 OpenGL 以了解其中的一些功能!
猜你喜欢
  • 2023-03-20
  • 1970-01-01
  • 2011-11-03
  • 1970-01-01
  • 2014-02-20
  • 2012-10-07
  • 1970-01-01
  • 1970-01-01
  • 2012-06-18
相关资源
最近更新 更多