OpenCV 中的基本颜色缩减算法
Basic color reduction algorithm in OpenCV
这是我在一本书中读到的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的范围?
请解释一下。
对于 n=255
,对于 p <255,(((p)/n)*n)
将返回 0,对于 p == 255,将返回 255。
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,这似乎不正确。
相关文章:
- 为什么这个运算符<重载函数对 STL 算法不可见?
- 基于ELO的团队匹配算法
- 将"打开的CV图像"中的"颜色"转换为整数格式
- C++选择排序算法中的逻辑错误
- 有没有办法将谓词中的元素偏移量传递给 std 算法?
- C++A*算法并不总是在路径中具有目标节点
- 排序算法c++
- 如何在内核C++中使用1920x1080x16M图形或类似的16M颜色?(VGA)
- 如何在24位SDL_Surface上设置像素的颜色
- 构建可组合有向图(扫描仪生成器的汤普森构造算法)
- 算法问题:查找从堆栈中弹出的所有序列
- 下面是排序算法O(n)吗
- KMP算法和LPS表构造的运行时间
- 为什么我的排序算法会更改数组值
- 求最大元素位置的分治算法
- 具有非整数边容量的最大流量的Dinic算法
- 开发哈希算法:RGB 颜色 ID 和字符串到 int
- OpenCV 中的基本颜色缩减算法
- 将中值剪切颜色缩减算法的输出调色板应用于源图像
- 检查图像中颜色的更快算法