我有一堆颜色(最多255种)(总共256^3种可能的值),为了压缩目的,我想想出另一种颜色,这不是其中之一。
例如,我有一个如此小的颜色表:[0,0,0]
,[1,42,69]
--剩下的256^3-2颜色中的任何一种都可以--不管是[0,0,7]
还是[6,6,6]
。
有人能为我提供一个简单有效的算法来找到另一种颜色吗?
UPD:不好的想法也是受欢迎的。
发布于 2014-08-26 20:58:17
[0,0,0]
开始,根据步骤1中的哈希表检查它。该算法在颜色个数上是线性的。
发布于 2014-08-26 21:38:48
既然我们现在有两个答案,我想贴我自己的。
我们不希望现有颜色表中的任何颜色变得透明。这就是为什么我说过,这个颜色表可以是最大的255颜色长度。
因此,至少会有一个红色(或绿色或蓝色)通道值未使用。因此,我们不必使用256^3大的标志表-- 256 (用于内存的比特或用于速度的字节)就足够了。
发布于 2014-08-26 21:12:59
遍历您的图像,计算256个可能的像素值中每一个发生的次数。使用std::min_element
(一种可能性)找到最小的计数,并使用该颜色号。如果你说的是256个可能的颜色值,那就差不多了。
如果你真的每像素有24位,那么你可能想要用稀疏的表示来表示计数,因为(对于任何合理大小的图片)它们中的很多都不可避免地为零(你需要大约1600万像素的图片,甚至理论上使用所有可能的颜色)。OTOH,在现代计算机上,即使使用数十兆字节(大约)来表示一个密集的计数可能是值得的--它可能会使您的处理更快(没有需要计算的哈希代码),而且内存使用量仍然很少,因此减少处理时间是值得的。
https://stackoverflow.com/questions/25514833
复制相似问题