这可能很容易理解,但我没有在Brad Larson的GPUImage中使用normalizeColor函数。你找到它,例如在Threshold.fsh下的colorObjectTracking示例中:
vec3 normalizeColor(vec3 color)
{
return color / max(dot(color, vec3(1.0/3.0)), 0.3);
}
这是我得到的:你把传入的颜色“颜色”除以0.3或颜色矢量的点积和(1 / 3,1 / 3,1 / 3)如果结果点积大于0.3。
所以有两个问题:
非常感谢! ALTI
答案 0 :(得分:2)
问一个更合适的地方可能是项目网站本身,但我会咬人。
片段着色器的点是识别图像中具有特定颜色的像素。该功能对颜色的亮度进行粗略标准化,以便在匹配对象上的颜色时可以考虑不同的照明条件。 max()
操作只是一个限制,以防止事情在某些颜色值上变得非常古怪。
这个特殊的片段着色器完全基于Apple的核心图像工程师在其题为"Object Detection by Color: Using the GPU for Real-Time Video Image Processing"的GPU Gems文章中提供的示例,他们在那里详细介绍了它。
更好的方法是通过去除亮度分量来获得与给定颜色的接近度,而是检查像素的色度。如果你有YUV源,你可以很容易地从Cr和Cb组件中做到这一点。我的GPUImageChromaKeyFilter说明了从RGB输入中提取YUV数据,然后在色度周围应用阈值。这也是Apple的一个例子(我相信这是来自他们的ChromaKey WWDC样本)。