Colors 灰度CMYK像素

Colors 灰度CMYK像素,colors,rgb,grayscale,cmyk,Colors,Rgb,Grayscale,Cmyk,我需要将CMYK图像转换为灰度CMYK图像。起初我认为我可以使用与RGB->灰度转换相同的方法,比如(R+G+B)/3或max(R,G,B)/2+min(R,G,B)。但不幸的是,这对CMYK不好,因为CMY和K是冗余的。黑色cmyk(0,0,0255)将变为64。我应该用它吗 int grayscaled = max((c + m + y) / 3, k) 还是会更棘手?我不确定,因为CMYK实际上是一个冗余的颜色模型,相同的颜色可以用不同的方式编码。有几种方法可以将RGB转换为灰度,提到的

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

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

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

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

根据中的公式,将
CMYK
转换为
RGB
非常便宜,然后可以使用众所周知的方法将其转换为灰度。假设
c
m
y
k
在[0,1]范围内,我们可以将其转换为灰度亮度,如下所示:

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

另请参阅,了解有关这种转换为灰度的更多信息。

实际上,从cmyk转换为rgb并不是那么容易,而且需要查询icc_配置文件,但“简单”公式也可以工作+-很好。如果您试图获得灰度图像,输出不就是K通道吗?我不太懂CMYK,所以如果我错了,请向我解释。@Hawken不,max CMY是黑色的,所以有很多方法可以用CMYK表示颜色。我的意思是(1,1,1,0)和(0,0,0,1)理论上是相同的黑色。是的,但是如果它们是相同的颜色,只使用黑色墨水可以节省墨水,不是吗?此外,某些打印机在进行灰度处理时使用不同的黑色墨水;也许只有使用“K”通道才可能触发这种情况?@Hawken是的,但问题是如何在CMYK中转换图像。您不能假设此图像针对墨水进行了优化。所以,如果你有一个CMY图像,其中K通道是空的,它也应该被正确地转换。