OpenCV中的基本颜色缩减算法

时间:2013-11-13 11:24:45

标签: c++ c algorithm opencv colors

以下是我在书中阅读的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)*nn的第一个倍数小于或等于p。我认为只有这个就足以使色彩减少n因子。但是我没有得到添加n/2的必要性。

此外,如果p=255n=5,此公式将尝试设置p = 257,它是否会超出p的范围? 请解释一下。

2 个答案:

答案 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,这似乎不正确。