什么是将图像转换为有限大小的调色板的好算法

时间:2014-08-15 20:41:23

标签: c++ image algorithm palette

我试图找出一种能够将图像(8或32位)转换为3或4种自定义颜色(不是灰度)的有限调色板的算法。

这可能吗?

我正在尝试使用C ++(但我可以从其他语言中获取它)

似乎Qt已经有了一个调色板 - 虽然我不明白它的用法,它似乎强制在其自己的标准调色板上显示,我没有看到任何定制它的方法。

我很感激一些算法示例或建议。

1 个答案:

答案 0 :(得分:4)

您可以通过传递convertToFormat的QRgb值数组,将图片转换为使用固定数量的颜色:

http://qt-project.org/doc/qt-5/qimage.html#convertToFormat-2

在这种情况下没有抖动......它只是选择最接近的颜色来使用。所以它不是强迫你的手调色板,但你必须决定使用什么颜色。互联网上有很多“图像调色板”生成器,如果你想要选择用于图像的N种“最佳”颜色,你可能会看到它们,尽管它将是一种启发式。

如果你想要抖动,你可以从Meego的这个案例开始:

https://github.com/openwebos/qt/blob/master/src/plugins/graphicssystems/meego/dithering.cpp

拥有此类任务的人通常会使用ImageMagick:

http://www.imagemagick.org/Usage/quantize/