这是我在一本书中读到的OpenCV中的基本颜色还原公式。
//p is the value of the channel of a pixel
//n is the reduction factor
p = (p/n)*n + n/2; //integer division我知道第一个表达式(p/n)*n是小于或等于p的n的第一个倍数。我认为这对于通过n因子减少颜色就足够了。但我不明白有什么必要将n/2添加到其中。
而且,如果p=255和n=5,这个公式将尝试设置p = 257,它会不会溢出p的范围?
请解释一下。
发布于 2013-11-13 21:11:32
使用n=255时,如果p< 255,(((p)/n)*n)将返回0,如果p == 255,则返回255。
为了达到平衡,您可能希望p< 128时返回0,p >= 128时返回255。这可以通过以下方式实现:
((p + n/2) / n) * n这有点像((p / n) + 0.5) * n,只是你显然不能这么做。其效果是对p/n的结果进行舍入,而不是截断。实际上,这只适用于n的某些值。
获得所需内容的一种简单方法是使用查找表。
我同意((p)/n)*n + n/2有问题,正如老飞碟指出的那样。
发布于 2013-11-13 20:18:36
他们说n/2需要有“中心”位置,而不是最小位置,但你是对的,它看起来不需要。假设我想要两种颜色--黑色和白色,所以n=255。如果没有n/2,我会得到0和255。n/2 - 127和382,这似乎不正确。
https://stackoverflow.com/questions/19952507
复制相似问题