3

假设我有一个灰色图像,我想在上面绘制例如文本。现在图像有一些暗区和一些亮区。因此,如果我为每个字符选择一种单独的颜色,我该如何计算这种颜色以获得文本的最高对比度?

一种实用的方法是使用黄色。(我不知道为什么,但它经常用于电影和纪录片中的字幕)此外,我可以在明亮的背景区域使黄色变暗,在黑暗的背景区域将其突出显示。但这可能会提供一些分层效果。

我知道色彩空间可能很重要。我从 RGB 灰度值开始,但 LAB、HSV 或 HSL 可能更适合计算最佳颜色。

编辑: 因为有一个有用的用例的问题:我真的不想用不同的颜色绘制文本字母。它是关于灰色纹理背景上特定字形的颜色选择。(例如 MR 图像。)

4

1 回答 1

1

您问题的最简单答案是最大化背景和文本颜色之间的距离。

如果您转换为 HSL,您可以通过最大化 L(HSV 中的 V)之间的距离来做到这一点。只需在背景亮度小于 50% 时选择白色,否则选择黑色。这是一个例子:http: //jsfiddle.net/E2kU4/

if(bgLightness < 50){
    color = "white";
}else{
    color = "black";   
}

我认为这几乎可以解决它,但还有其他几点:

我不确定这个用例是什么。具有不同颜色字符的单词可能看起来很糟糕。通常,字幕选择单一颜色以保持一致性。

黄色由于其饱和度而确实在黑白图像中脱颖而出。此外(我不确定如何准确地说出来),与其他具有相似亮度的颜色相比,黄色具有非常高的色度。最好在HUSL页面上演示;顺便说一句,HUSL 是一个用于创建可读颜色的优秀库。

黄色很容易与深色形成对比,因为它很轻。它也不会与浅色形成对比,但这通常可以通过在字幕中添加阴影/轮廓来解决。另一个例子:http: //jsfiddle.net/E2kU4/1/

但是您可以将相同的技术(应用阴影或轮廓)应用于黑白示例以获得最大对比度。现在,轮廓与文本的对比度最大。轮廓也从背景中突出,除非这些颜色相似,在这种情况下对比度已经非常高(例如接近黑色背景、黑色轮廓、白色文本)http://jsfiddle.net/E2kU4/2/

最后,与 HSL/RGB 之间的转换应该是微不足道的。有很多图书馆可以做到这一点。

于 2013-10-22T21:40:36.517 回答