- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在处理一些静态图像处理,GPUImage 是一个非常棒的框架(谢谢 Brad Larson!)。
我的理解是:
GPUVideoCamera
中),RGB -> YUV 可以硬编码到片段着色器中(例如:GPUImageChromaKeyFilter
)我有很多图像处理步骤,有些可以基于 YUV,有些可以基于 RGB。基本上,我想混合 RGB 和 YUV 滤镜,所以我的一般问题是:
这种连续转换的成本/信息损失是多少,您会推荐任何设计吗?
谢谢!
(PS:iPhone4 YUV->RGB 转换和AVCaptureStillImageOutput
像素格式有什么问题?)
最佳答案
在 GPUImage 中使用 YUV 是一个相当新的添加,我仍在试验中。我想引入 YUV 来尝试提高过滤器性能、减少内存使用并可能提高颜色保真度。到目前为止,我的修改只实现了这三个中的一个。
如您所见,我从相机中提取 YUV 帧,然后决定在过滤器管道的后续阶段如何处理它们。如果相机输入目标的所有过滤器只需要单色输入,则相机输入将只发送未处理的 Y channel 纹理到管道。如果任何滤镜需要 RGB 输入,相机输入将执行基于着色器的 YUV->RGB 转换。
对于采用单色的过滤器,这可以通过消除 RGB 转换阶段(由 AV Foundation 在请求 BGRA 数据时或在我的转换着色器中完成)以及冗余转换来显着提高性能RGB 回到亮度。在 iPhone 4 上,在 720p 帧上运行的 Sobel 边缘检测过滤器的性能从使用 RGB 输入的每帧 36.0 ms 到使用直接 Y channel 的 15.1 ms。这也避免了由于将 YUV 转换为 RGB 并返回亮度的舍入而导致的轻微信息丢失。 8 位颜色 channel 只有这么多的动态范围。
即使在使用 RGB 输入时,这种转换从 AV Foundation 移出并进入我的着色器也会带来性能上的提升。在 iPhone 4S 上,使用我的转换着色器而不是 AV Foundation 的内置 BGRA 输出,针对 1080p 输入运行饱和过滤器从每帧 2.2 毫秒下降到每帧 1.5 毫秒。
两种 RGB 方法的内存消耗几乎相同,因此我正在尝试一种改进方法。对于单色输入,由于输入的纹理尺寸较小,内存使用量会显着下降。
实现全 YUV 管道更具挑战性,因为您需要为 Y 和 UV 平面维护并行渲染路径和着色器,并为两者提供单独的输入和输出纹理。从 RGB 中提取平面 YUV 很棘手,因为您需要以某种方式从一个输入中提取两个输出,而这在 OpenGL ES 中是不支持的。您需要执行两次渲染过程,这是相当浪费的。交错 YUV444 作为多级管道的颜色格式可能更实用,但我还没有尝试过这个。
同样,我才刚刚开始修补它。
关于ios - GPUImage : YUV or RGBA impact on performance?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15004621/
如何在 Linux x64 上以侵入性和影响最小的方式获取已运行进程的所有线程堆栈跟踪? 到目前为止我想到的事情: gdb - 恐怕它会使进程变慢太多,而且持续时间太长; strace+ - 不知道它
在impact.js框架中,Weltmeister关卡编辑器生成的关卡对象的结构是什么?我能找到的最多信息是 ig.game.loadlevel 的文档,但是非常有限。特别是layer的data属性的
我需要捕获 SIGABRT、SIGSEGV 和 SIGILL,以便在我无法控制的事情失败并且程序需要退出时向用户显示正确的严重错误消息。 但是我的程序做了很多实时计算,所以性能很重要。 signal(
引入 ES6 template strings由反引号 ` 分隔。 在哪些情况下用反引号替换字符串周围的单引号 ' 或双引号 " 会产生不同的结果,否则是不安全的? 作为操作的一部分执行代码内现有反引
我想将 Upcoming 文本推到底部,而 7 pax 文本保留在顶部。我对该列使用了 verticalArrangement = Arrangement.SpaceBetween,但它没有任何效果,
我一直在努力使用 Impact 字体大约一年了。 它应该是一种网络安全字体,但事实并非如此。 当我使用标准的“Impact”时,它在移动平台上不起作用。如果我使用特定的字体@font-face,就不可
我有一个多线程Step,配置了一个带有48个线程corePoolSize的线程池(这是一台大机器),但是我没有配置节流限制。 我想知道是否因为这个原因一直在使用机器。 Spring Batch文档说节
简单问题: 是PropTypes增加交付的 bundle 大小并且仅在开发模式下显示吗? 最佳答案 这取决于您如何构建项目。如果您使用webpack并将process.env.NODE_ENV设置为生
这个问题已经有答案了: Performance difference between Java 8 lambdas and anonymous inner classes (2 个回答) Does a
假设我们有以下代码: @SpringBootApplication @ConditionalOnProperty(value = "scheduling.enable") @EnableSchedul
我正在尝试使用 Impact.ttf。它内置于 OSX 中,但在 xcode 上的自定义字体中看不到它。所以我将它包含在我的项目中,如屏幕所示并使用 UIFont *font1 = [UIFont f
在组件树中向下或向上有条件地渲染弹出窗口(例如通过 {shouldShowLoading && } 加载微调器弹出窗口)是否更有意义?那么以下两个选项中哪一个是有利的 - 或者在性能上没有差异? 在组
如何在不影响任何日期的情况下,从 oracle 数据库的 datetime 列中删除时间并将其保存为默认时间 00:00:00。 例如:我有一个数据类型为 datetime 的列,并且还有数千条记录,
我正在重构我的一个 Controller 以使其成为一项服务,我想知道不将整个服务容器注入(inject)我的 Controller 是否会对性能产生影响。 这样效率更高吗: innova.path.
如果我在 AsyncTask 的 doInBackground 方法中启动一个新线程,从性能的角度来看是否可以?我写了一个从服务器下载文件的小程序。该方法在 doInBackground 中运行。现在
所以,我们正在尝试运行一个屏幕报告,这不会更改任何存储的数据。但是,它很复杂,因此需要遍历几个(TEMPORARY*)表。 它从已复制的事件表中提取数据。 从 中获取“合格”记录时令人讨厌的一点 te
我正在构建一个实用程序,用于从手机中卸载不太重要的包以释放空间和资源。 它适用于 root 的 android 手机。 该实用程序将删除几个不需要的语言包,如阿拉伯语, 中文, 丹麦语等 对于用户来说
我想使用 matplotlib 颜色映射的 set_bad 参数为 nan 值分配特定颜色。我创建了一个颜色图: from matplotlib.colors import ListedColorma
我是 HTML 5 和 Impact 的新手。我将开始使用 HTML 5、Javascript 进行编程。我听说 Impact 是最好的 Javascript 2D 引擎之一,所以我考虑购买它并尝试一
是否可以暂时忘记身份验证、jwt 登录内容和安全性并稍后再实现? 我选择java作为我的游戏的restful服务后端,但是我很难使用mysql数据库、jwt身份验证和spring boot设置一个简单
我是一名优秀的程序员,十分优秀!