【问题标题】:Basic color reduction algorithm in OpenCVOpenCV中的基本减色算法
【发布时间】:2013-11-25 23:29:54
【问题描述】:

这是我在一本书中读到的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 是小于或等于pn 的第一个倍数。我认为这足以减少n 的颜色。但我不明白添加n/2 有什么需要。

还有,如果p=255n=5,这个公式会尝试设置p = 257,会不会超出p的范围?

请解释一下。

【问题讨论】:

  • 您可以为这本书添加名称吗? (p/n)*n 完全没有意义。
  • OpenCV 2 计算机视觉应用程序编程食谱 - Robert Laganiere
  • 整数除法,OK。
  • 是的,我之前忘了提。

标签: c++ c algorithm opencv colors


【解决方案1】:

对于n=255(((p)/n)*n) 将在 p

为了保持平衡,您希望在 p = 128 时返回 255。这可以通过以下方式实现:

((p + n/2) / n) * n

这有点像((p / n) + 0.5) * n,只是你显然不能这样做。效果是对p/n 的结果进行舍入,而不是截断。实际上,这只适用于某些 n 值。

使用查找表是获得所需内容的一种简单方法。

我同意 ((p)/n)*n + n/2 有问题,正如 old-ufo 指出的那样

【讨论】:

  • 这种方法产生的结果很奇怪,正在形成新的颜色,书上指定的方法效果很好,我就是看不懂。
【解决方案2】:

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

【讨论】:

  • 是的,不明白他们为什么把 n/2 放在那里。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-29
  • 1970-01-01
  • 2011-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多