以下是我在书中阅读的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
是n
的第一个倍数小于或等于p
。我认为只有这个就足以使色彩减少n
因子。但是我没有得到添加n/2
的必要性。
此外,如果p=255
和n=5
,此公式将尝试设置p = 257
,它是否会超出p的范围?
请解释一下。
答案 0 :(得分:1)
使用n=255
,(((p)/n)*n)
将返回0表示p<对于p == 255,255和255。
为了保持平衡,你需要为p< 0返回0。对于p> = 128,可以使用128和255.这可以通过以下方式实现:
((p + n/2) / n) * n
这有点像((p / n) + 0.5) * n
,除了你显然不能这样做。效果是对p/n
的结果进行舍入而不是截断。实际上,这只适用于某些n值。
一种简单的方法来获得您想要的东西就是使用查找表。
我同意((p)/n)*n + n/2
有问题,正如old-ufo
答案 1 :(得分:0)
他们说n / 2需要具有“中心”位置而不是最小值,但你说得对,看起来不需要。 让我们假设我想要2种颜色 - 黑色和白色,所以n = 255。如果没有n / 2,我将得到0和255。使用n / 2 - 127和382,这似乎不正确。