3

我需要将 CMYK 图像转换为灰度 CMYK 图像。起初我以为我可以使用与 RGB -> 灰度转换相同的方法,例如 (R + G + B) / 3 或 max(r, g, b) / 2 + min(r, g, b)。但不幸的是,这对 CMYK 很不利,因为 CMY 和 K 是多余的。黑色 cmyk (0, 0, 0, 255) 将变为 64。我应该使用

int grayscaled = max((c + m + y) / 3, k)

还是会更棘手?我不确定,因为 CMYK 实际上是一种冗余颜色模型,相同的颜色可以用不同的方式编码。

4

1 回答 1

3

有几种方法可以转换RGB为灰度,所提到的通道的平均值就是其中之一。使用Y来自颜色空间的通道YCbCr也是一个常见选项,以及L来自 的通道LAB,以及其他选项。

根据http://www.easyrgb.com/index.php?X=MATH中的公式转换CMYK为便宜,然后您可以使用众所周知的方法转换为灰度。假设, , , 和在 [0, 1] 范围内,我们可以将其转换为灰度亮度,如下所示:RGBcmyk

def cmyk_to_luminance(c, m, y, k):
    c = c * (1 - k) + k
    m = m * (1 - k) + k
    y = y * (1 - k) + k

    r, g, b = (1 - c), (1 - m), (1 - y)
    y = 0.299 * r + 0.587 * g + 0.114 * b
    return y

另请参阅http://en.wikipedia.org/wiki/Grayscale了解更多关于此转换为灰度的信息。

于 2013-02-23T02:16:28.433 回答