gpt4 book ai didi

cocoa - 如何递归使用 CIFilter 的输出作为新输入?

转载 作者:行者123 更新时间:2023-12-03 17:41:25 24 4
gpt4 key购买 nike

我编写了一个自己的 CIFilter 内核,它对相机信号进行一些图像处理。它需要两个参数:参数一是“inputImage”(当前相机图像),参数2是“backgroundImage”,它正在使用第一个相机图像进行初始化。

过滤器应该递归地工作。过滤器的结果应在下一次迭代中用作新的“backgroundImage”。我正在计算背景图像和一些方差,因此需要先前渲染的结果。

不幸的是,我无法在下一次迭代中使用 CIFilter 的输出 CIImage,因为内存负载不断增加。处理 10 秒后,RAM 使用量达到 1.4GB。以标准方式(无递归)内存管理使用过滤器就可以了。

如何在下一次迭代中重用过滤器的输出作为输入?我已经对结果图像做了 NSLog。 Ant 告诉我了

background {

CISampler:0x1002e0360 image {
FEPromise: 0x1013aa230 extent [0 0 1280 720]; DOD [0 0 1280 720]; filter MyFeatureDetectFilter: 0x101388dd0; kernel coreImageKernel; image {

CISampler:0x10139e200 image {
FEBufferImage: 0x10139bee0 metadata.colorspace: HDTV; extent: [0 0 1280 720]; format: BGRA_8; uid 5
}

几秒钟后,日志变成了某种东西。喜欢

                            }                                                                                                                                                            
}
}
}
}

这告诉我 CIImages “始终”是所需操作的原型(prototype)。递归地使用它们只会将“生成的 CIImage '原型(prototype)'”作为输入添加到新的'原型(prototype)'中。随着时间的推移,渲染的“规则”会膨胀成一个巨大的嵌套原型(prototype)结构。

有什么方法可以强制 CIImages 展平内存中的结构吗?如果我能进行递归处理我会很高兴,因为这会将 QuartzCore 的威力发挥到极致。

我在 QuartzComposer 中尝试了同样的操作。将输出与输入连接起来是可行的,但也会占用大量内存。一段时间后它崩溃了。然后我尝试使用 QC 的队列,一切正常。 QC 队列的“xcode”等效项是什么?或者是否有任何机制可以重写我的内核以将“结果”保留在内存中以供下一次迭代使用?

最佳答案

您正在寻找的似乎是 CIImageAccumulator class 。这允许您使用过滤器的输出作为下一次迭代的输入。

编辑:

有关如何使用它的示例,您可以查看 this Apple sample code .

关于cocoa - 如何递归使用 CIFilter 的输出作为新输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12780298/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com