作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想用 GPU 处理能力做两个 RGB 视频帧减法。
即,第一张图像的每个像素的 R,G,B 值与第二张图像相减。
此外,结果希望具有负 RGB 值并存储在 NSMutableArray 中。
我使用 AVCaptureSession 来帮助我获取 CMSampleBufferRef 格式的原始视频帧。
1) 任何图像格式都支持负 RGB 值?
或者我需要制作一个类似矩阵的类来存储图像?
(似乎某些图像格式使用浮点数来存储 RGB 值......)
(我听说过图像不同的混合模式,它与我想要的相似,但会绝对 RGB 值,我希望结果具有负值)
2) 如何使用 GPU 处理能力进行减法?
(我可以用 CPU 做,但是 FPS 太慢了,大约 5-6 FPS,但我希望它是 30 FPS)
(OpenGL 或 Quartz Composer 有用吗?)
谢谢。
最佳答案
正如 Hammer 指出的,我的开源 GPUImage 中的 GPUImageDifferenceBlendFilter框架就是这样做的。它使用以下片段着色器来获得红色、绿色和蓝色 channel 的绝对差异:
varying highp vec2 textureCoordinate;
varying highp vec2 textureCoordinate2;
uniform sampler2D inputImageTexture;
uniform sampler2D inputImageTexture2;
void main()
{
mediump vec4 textureColor = texture2D(inputImageTexture, textureCoordinate);
mediump vec4 textureColor2 = texture2D(inputImageTexture2, textureCoordinate2);
gl_FragColor = vec4(abs(textureColor2.rgb - textureColor.rgb), textureColor.a);
}
varying highp vec2 textureCoordinate;
varying highp vec2 textureCoordinate2;
uniform sampler2D inputImageTexture;
uniform sampler2D inputImageTexture2;
void main()
{
lowp vec4 textureColor = texture2D(inputImageTexture, textureCoordinate);
lowp vec4 textureColor2 = texture2D(inputImageTexture2, textureCoordinate2);
gl_FragColor = vec4((textureColor.rgb - textureColor2.rgb + 1.0) * 0.5, textureColor.a);
}
关于iOS:如何用 GPU 能力减去两个视频帧?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12292637/
我是一名优秀的程序员,十分优秀!