2013-02-22 107 views
2

我需要將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.我應該只使用灰度CMYK像素

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

或者它可能會更棘手?我不確定,因爲CMYK實際上是一個冗餘的顏色模型,並且可以用不同的方式編碼相同的顏色。

+0

如果你想獲得一個灰度圖像,輸出是不是隻是K通道?我不太瞭解CMYK,所以如果我錯了,請向我解釋。 – Hawken 2013-08-24 17:24:54

+0

@Hawken不,最大CMY是黑色的,所以有很多方法可以用CMYK表示顏色。我的意思是(1,1,1,0)和(0,0,0,1)理論上是相同的黑色。 – AvrDragon 2013-08-27 12:24:09

+0

是真的,但如果它們是相同的顏色,只使用黑色墨水將節省您的墨水不是嗎?某些打印機在做灰度時也使用不同的黑色墨水;也許只有使用'K'頻道可能觸發這個? – Hawken 2013-09-05 01:55:41

回答

2

有幾種方法可以將RGB轉換爲灰度,所提到的通道的平均值就是其中之一。使用顏色空間YCbCr中的Y通道也是一種常見選項,以及LAB中的L通道以及其他選項。

根據http://www.easyrgb.com/index.php?X=MATH中的公式,將CMYK轉換爲RGB便宜,然後可以使用衆所周知的方法轉換爲灰度。假設該cmyk在範圍[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 

參見http://en.wikipedia.org/wiki/Grayscale爲詳細瞭解一下此轉換爲灰度。

+0

實際上將cmyk格式轉換爲rgb並不那麼容易,並且需要icc_profile,但「簡單」的公式工作+ - 也很好。 – AvrDragon 2013-02-25 16:17:46