我正在使用 opengl 为 android 开发色度键(绿屏)过滤器;唯一的区别是我不仅要替换绿色背景,还要替换用户传递的任何颜色。我已经能够替换颜色,但问题是它也会替换光强度非常高的物体的颜色。
任何人都可以帮助我减少纹理的眩光,以便我的滤镜可以按预期工作吗?
或任何完美运行的引用绿屏滤镜。
任何事情都会受到欢迎。
编辑:我添加了屏幕截图来解释这种情况,在这里我尝试用这些云替换红色背景,它适用于所有区域,除了有眩光的区域。我可以通过增加公差值来克服这个问题,但这样会替换掉对象中的一些黄色像素。
最佳答案
在算法方面,仅匹配 RGB 颜色会很困难。
首先要注意的是,在您的情况下,您实际上只是在查看某种形式的亮度敏感值,而不是纯色度值。明亮的像素在 R、G 和 B channel 中总是有强烈的响应,因此简单的阈值处理不会在这里提供可靠的解决方法。
如果您提取了一个与亮度无关的色度值(就像 YUV 编码所做的那样),那么您可以独立于颜色的亮度来分离“红色”、“绿色”和“蓝色”。
但是,这仍然会有边缘情况。例如,如果您的瓶子是红色的或贴有红色标签会怎样?要解决这个问题,您需要某种形式的几何特征提取(例如图像上的 sorbel 边缘检测),然后仅在特定的识别区域内替换颜色。
这一切都不是微不足道的 - 准确的物体检测和识别非常困难,并且仍在积极研究中(例如,想想 Tesla 巡航控制试图在驾驶时发现和避开物体)。
关于android - 如何处理色键滤镜中的镜面高光?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39865387/