我正在尝试找出一种算法,将图像(8 位或 32 位)转换为 3 或 4 种自定义颜色(非灰度)的有限调色板。
这可能吗?
我正在尝试使用 C++(但我可以从其他语言获得它)
Qt 似乎已经有了一个调色板——虽然我不明白它的用法,但它似乎强制在它自己的标准调色板之一上显示,我没有看到任何自定义它的方法。
我将不胜感激一些算法示例或建议。
最佳答案
通过使用 convertToFormat
传入 QRgb 值数组,您可以将图像转换为使用固定数量的颜色:
http://qt-project.org/doc/qt-5/qimage.html#convertToFormat-2
在那种情况下没有抖动……它只是选择最接近的颜色来使用。所以这不是强制你选择调色板,而是你必须决定使用什么颜色。 Internet 上有很多“来自图像的调色板”生成器,如果您想选择 N 种“最佳”颜色用于图像,您可以查看它们,尽管这将是一种启发式方法。
如果你想要抖动,你可以从 Meego 的这个案例这样的资源开始:
https://github.com/openwebos/qt/blob/master/src/plugins/graphicssystems/meego/dithering.cpp
经常有这样的任务的人会使用 ImageMagick:
关于c++ - 将图像转换为有限大小的调色板的好算法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25333903/