问题标签 [gpuimage]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
937 浏览

gpuimage - 没有相机的 GPUImageMovieWriter

我是 GPUImage 的新手,但我认为它真的很好:布拉德干得好。我喜欢过滤器如此干净地链接在一起的方式。

目标
我正在尝试连接以下内容:
* 创建一个 openGL 场景
* 应用一些过滤器(与下面的讨论无关)
* 录制到视频

问题
我的问题是我不清楚如何连接录音。不幸的是,与 opengl-es 的交互并没有给我足够的细节来弄清楚该怎么做。

尝试
我从包中的示例有两个起点:
* CubeExample - 让原始 openGL 与 GPUImage 交互
* SimpleVideoFileFilter - 通过过滤器将视频文件重新编码为新文件

我从 CubeExample 开始,用 videoCamera 过滤器替换了 GPUImageSolidColorGenerator(顺便说一句,我不知道如何从没有过滤器开始)。这使我能够创建网格、渲染它并与之交互。然后我想我只需按照过滤和重新编码电影中给出的说明添加 GPUImageMovieWriter 过滤器,但这需要 GPUImageMovie(源)和编写器之间的协调。因为我不想要一个相机流或一个视频文件作为源,而是一个动画的 openGL 序列,我不清楚如何去做。我试过videoInputReadCallback在movieWriter中添加一个:

where nextFrameis 创建下一帧,endProcessing完成后调用并设置 CMTime。如果没有newFrameReadyAtTime:atIndex:调用,它可以正常工作(动画图像按预期呈现到屏幕上),只是它创建了一个只有一帧的视频。通过newFrameReadyAtTime:atIndex:电话,我收到了消息

在它死之前,这让我认为 movieWriter 还没有准备好让渲染器呈现它的帧,但我不知道该怎么做。我已经尝试了很多其他的东西,但无济于事。从与 OpenGL-ES 交互(见上面的链接)中的描述来看,它似乎应该很容易,但我没有任何运气。

请求
为了使问题与其他人更相关,如果有人能够发布一个创建 openGL 场景(例如三角形)并将其连接到 GPUImageMovieWriter 以记录到文件的示例,我希望它可以旋转三角形10 帧,以便我们可以看到创建的不仅仅是静止图像。

谢谢。

0 投票
0 回答
972 浏览

ios - OpenGL ES 2.0 平面变形/扭曲效果 GPUImage iOS

正在玩一些很棒的 GPUImage 框架,并且能够使用片段着色器重现一些类似“凸”的效果。

但是,我想知道是否有可能使用 GPUImage 或任何其他 OpenGL 渲染到纹理来获得更复杂的 3D 平面弯曲。

我想要达到的效果看起来像这样 - 有没有机会使用深度缓冲区和顶点着色器获得类似的东西 - 或者只需要开发一些更复杂的片段着色器来模拟 Z 坐标?

实时相机输出 - 这是一张普通的纸

这就是我现在只使用片段着色器和一些周期性膨胀得到的 这是我在 GPUImage 中使用片段着色器可以获得的结果 - 不是很酷

谢谢

另一个想法是,也许可以在一些 3D 建模应用程序中对曲面进行原型制作,并以某种方式将纹理映射到它?

0 投票
1 回答
2307 浏览

ios - GPUImage:如何将不同的过滤器应用于图像,缩小它们并将结果平铺到输出图像

我是GPUImage库的新手。

我正在使用它从相机获取帧并实时过滤它们。我正在为我正在开发的过滤器使用不同的过滤器参数。

我想出了如何使用不同的过滤器并行过滤相机图像,但我现在想做的是输出一个结果图像,其中 4 个过滤后的图像平铺在一起以制作一个大的输出图像。

我的想法是我可以链接GPUImageTransformFilter实例和GPUImageAddBlendFilter实例来获得组合图像。例如,在缩小两个图像并将它们并排放置的最简单情况下:

然而,这会导致两个图像被缩放并相互重叠,结果被转换到图像的边缘而另一半为空。

我将不胜感激有关如何缩放和平铺较小图像以制作大图像的任何指示。

非常感谢!

0 投票
2 回答
2068 浏览

iphone - 在 UIView 上具有透明度的 GPUImage 视频

我正在开发一个 iOS 项目,该项目使用 AV-Out 在第二个屏幕上的 1280x720 窗口中显示内容。

我有一个MPMoviePlayerController's 视图作为背景,并在不同的其他元素(如UIImages和)之上UILabels。背景电影循环播放。

现在我想用另一个具有透明度的全屏动画覆盖整个视图,包括所有可见元素,这样只有底层视图的一部分是可见的。

我首先尝试了一个 png 动画UIImageView。我惊讶地发现它实际上可以在 iPhone5 上运行,但是当然 png 的大小太大了,以至于它使用了太多的内存,并且它在 iPhone4s 以下的所有东西上都会崩溃。所以我需要另一种方式。

我想出了如何使用 AVFoundation 同时播放第二部电影。到目前为止,一切都很好。现在我可以播放覆盖视频,但当然它还不是透明的。

我还了解到,通过该GPUImage库,我可以使用它GPUImageChromaKeyBlendFilter来过滤视频中的颜色以使其透明,然后将其与另一个视频结合起来。

我还不明白的是在我的情况下实现它以获得我想要的结果的最佳方法。

我可以使用顶部视频下方的整个视图层次结构作为第一个输入,GPUImageChromaKeyBlendFilter并使用绿屏风格的视频作为第二个输入,并以 720p 实时显示结果吗?我该怎么做?

GPUImageChromaKeyFilter还是使用并过滤绿屏风格的视频,并在所有其他视图之上的视图中播放它会更好吗?那么这个视频的背景会是透明的吗?

谢谢你的帮助!

0 投票
1 回答
1611 浏览

ios - GPUImage 绿屏

我正在尝试使用 GPUImage 制作绿屏效果。我想要达到的效果是播放窗帘打开的电影,并用图像替换电影的白色部分。这将显示窗帘,然后窗帘打开以显示图像。

我的电影显示正确,电影的白色部分和黑色一样,但是当窗帘打开时图像不显示。有人可以看看下面的代码并告诉我我做错了什么吗?

提前致谢。格雷格

0 投票
3 回答
5101 浏览

ios - 将 GPUImage 过滤器应用于 UIView

我有问题。我需要对Pixelate or Blur整个UIView. 喜欢eBay iPad应用程序。

我想用GPUImage,但我不知道怎么做。有一种方法可以直接将过滤器应用于 aGPUImageView而不通过 a UIImage

主要问题是UIViewiPad3 号上制作大屏幕截图非常昂贵(UIWindow抓取时间为 2 秒)。所以完美的解决方案是直接将过滤器应用于视图,就像 eBay 应用程序一样,但是.. 怎么样?

谢谢大家!

0 投票
1 回答
2659 浏览

ios - GPUImage内存警告

在图像上应用 GPUImage 过滤器时,我遇到了一个奇怪的问题。我正在尝试在图像上应用不同的过滤器,但在应用 10-15 个过滤器后,它会给我内存警告,然后崩溃。这是代码:

如果有人遇到同样的问题,请提出建议。谢谢

0 投票
0 回答
254 浏览

objective-c - 如何使用 GPUImage 在源图片(静止图像)的某个坐标处混合较小的纹理

我正在使用 GPUImage 库,我希望在静止图像的某个坐标处放置一个小徽标或文本。

我尝试使用 GPUImageSourceOverBlendFilter,它将第二张图片混合到源图片中,但默认位于源图片的中心。

任何人都可以分享一些想法我如何实现这一目标?

0 投票
1 回答
541 浏览

ios - GPUImage 和 OpenGL ES 中的多个单通道输出

我正在尝试使用 GPUImage 库进行图像处理(而不是图像输出到屏幕)。默认情况下,库输出一个 BGRA 纹理。我想改为输出多个单通道/单字节纹理。到目前为止,我一直在为 BGRA 中的每个像素进行多次计算。我已经达到了这种方法的局限性,因为 a)我现在每个像素有超过 4 个返回值,并且 b)将 BGRA-BGRA-BGRA-BGRA..... 去隔行扫描到 BBBB 的开销......, GGGG ..,RRRR ..,AAAA ..,开始真正让我的程序陷入困境。

我知道有一些示例代码可以将多个输入纹理与 GPUImage 一起使用,但我还没有看到多个输出纹理的任何内容。对于单字节输出,我相信我可以使用 GL_ALPHA 纹理(?),所以我猜测将多个纹理绑定到我的过滤器内核中的变量是一个问题。

谢谢!

0 投票
1 回答
659 浏览

ios - ios上的片段着色器中是否存在通过texture2D的内存泄漏?

我正在使用 Brad Larson 的 GPUImage 库,我想我发现了一个有趣的问题。

以下着色器程序执行得很好:

但是,此版本在大图像上崩溃(即,来自相机的 4x3 图像在最长边上调整为 2560)。在我看来,唯一显着不同的是一组 texture2D 调用:

我正在运行这个过滤器,然后是具有最小值的第二个过滤器(即,形态膨胀,然后是侵蚀,或形态闭合算子)。

我确实意识到实现这一点的更优化方法是尝试通过顶点着色器将所有纹理 2D 调用放到它们自己的位置;但是,如果半径为 10,则需要 314 个顶点,这超出了允许的位置数量。如果我在模拟器中运行这些并且所有其他条件都相同,那么第一个完成就好了,但是第二个代码会炸毁内存并且内存会急剧攀升以调用侵蚀过滤器。在 iPhone 4s 上运行,第一个代码片段完成得很好(当然,非常快),但第二个代码片段在膨胀后崩溃,并且不运行侵蚀调用。

最初,texture2D 看起来像是在泄漏;但是,这些函数是在一个线程中调用的。当线程退出时,模拟器中的所有内存都会被清除。因此,如果这些功能第一次正常工作,则可以多次运行而不会出现问题。

所以我的问题是:在那里进行的 texture2D 调用会导致这种行为吗?有没有办法在过滤器完成后刷新创建的任何缓冲区,而与结束调用之间的线程无关?

编辑:自从发布这个问题以来,我在一周内学到了一些东西:问题出在 for 循环本身。去掉 for 循环,内存问题就消失了。那是,

将分配尽可能多的内存,就好像循环内部发生了一些事情一样。我正在通过模拟器上的检查器确定这种行为。当我在 1280x1280 图像上运行没有 for 循环的着色器时,我总共分配了 202 mb,当我使用 for 循环运行它时,我得到 230 mb 分配,无论 for 循环内发生什么。while 循环也会发生相同的行为。