OpenCV 中的基本颜色缩减算法

Basic color reduction algorithm in OpenCV

本文关键字:算法 颜色 OpenCV      更新时间:2023-10-16

这是我在一本书中读到的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=255n=5,这个公式会尝试设置p = 257,会不会溢出p的范围?

请解释一下。

对于 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有问题,正如老不明飞行物所指出的那样

他们说需要 n/2 才能具有"中心"位置而不是最小值,但你是对的,看起来不需要。假设我想要 2 种颜色 - 黑色和白色,所以 n=255。如果没有 n/2,结果我将有 0 和 255。使用 n/2 - 127 和 382,这似乎不正确。