答案 0 :(得分:2)
我在Javascript中为此编写了代码。翻译成C语言非常容易!
参见deltaE2000()
,它在LCHab中采用颜色,也许还有转换RGB的函数 - >线性RGB - > XYZ->实验室 - > LCHab。 Code和UI demo。
答案 1 :(得分:1)
OpenCV可能会这样做。
答案 2 :(得分:0)
尝试http://github.com/dmilos/color
代码示例:
typedef ::color::rgb<double> color_t; // or lab or hsv or any other available model
color_t a = ::color::constant::orange_t{};
color_t b = ::color::constant::chocolate_t{};
std::cout << ::color::operation::distance< ::color::constant::distance::CIE94_textile_entity >( a, b ) << std::endl;
std::cout << ::color::operation::distance< ::color::constant::distance::CIEDE2000_entity >( a, b ) << std::endl;
其他算法的其他示例:
https://github.com/dmilos/color/tree/master/example/less-than-1k/operation/distance
颜色模型无关紧要。它将在内部自动转换。
答案 3 :(得分:0)
我写这个图书馆供个人使用:
https://github.com/ThunderStruct/Color-Utilities
标头和cpp文件都小于5kb,因此如果您不想使用更大的库混乱项目,这可能会很有用
以下是一个示例:
// Colors' construction
ColorUtils::rgbColor c1(1.0, 1.0, 1.0), c2(0.5, 0.5, 0.5);
// Calculate Delta-E using CIE76
std::cout << ColorUtils::getColorDeltaE(c1, c2) << '\n';
这会输出46.8072
(您可以使用this转换器验证结果)