我有一堆(最多255个)颜色(总共256 ^ 3个可能的值),出于压缩目的,我想要想出另一种颜色,而不是其中之一。
例如,我有一个很小的颜色表:[0,0,0]
,[1,42,69]
- 剩余的256 ^ 3-2颜色中的任何一种都可以 - 无论是{{1} 1}}或[0,0,7]
。
有人能为我提供一种简单有效的算法来寻找另一种颜色吗?
UPD:也欢迎不好的想法。
答案 0 :(得分:2)
[0,0,0]
开始,并根据步骤1中的哈希表进行检查。此算法的颜色数量是线性的。
答案 1 :(得分:2)
由于现在我们有两个答案,我想张贴自己的答案。
我们不希望现有颜色表中的任何颜色变得透明。这就是为什么我说,颜色表最长可以是 255 颜色 因此,至少有一个红色(或绿色或蓝色,无论如何)通道值未使用。所以我们不必使用256 ^ 3大型标志表 - 256(内存位或速度字节)就足够了。
答案 2 :(得分:1)
浏览图像,计算256个可能像素值中的每一个出现的次数。使用std::min_element
(一种可能性)查找最小计数,并使用该颜色编号。如果你真的在谈论256种可能的颜色值,那就是它。
如果你真的有每像素24位,那么你可能想要使用稀疏表示计数,因为(对于任何合理大小的图片),其中许多将不可避免地为零(你需要大约16-百万像素图片甚至在理论上使用所有可能的颜色)。 OTOH,在现代计算机上,甚至使用密集表示计数所需的几十兆字节(左右)可能是值得的 - 它可能会使您的处理更快(没有哈希码来计算)并且仍然有足够的内存减少处理时间是值得的。