使用python将图像转换为rgb数组并将其转换为CMYK数组

时间:2018-10-15 11:33:48

标签: numpy python-imaging-library

我正在尝试将图像转换为cmyk数组并分离青色,Magentha,黄色和黑色值。是否可以使用python。如何将图像转换为Rgb数组然后转换为cmyk?

从PIL导入图像

im = Image.open('apple.png')

pixels = list(im.getdata())

打印(像素)

我尝试了上面的代码,但是运行代码后ide被卡住了。该代码有任何错误吗?(在上面的代码中我只打印了rgb数组)。

1 个答案:

答案 0 :(得分:2)

转换为CMYK:

im = Image.open('apple.png').convert('CMYK')

我建议使用numpy(通常导入为np)来处理像素数据。两者之间的转换很简单。

Image-> ndarraynp.array(Image)

ndarray-> ImageImage.fromarray(ndarray)

因此将您的图片隐藏到ndarray

import numpy as np

np_image = np.array(im)

让我们检查图像的尺寸:

print(np_image.shape) # (rows, columns, channels)

(400, 600, 4)

最后打印出实际的像素值:

print(np_image)

[[[173 185 192   0]
  [174 185 192   0]
  [173 185 192   0]
  ...
  [203 208 210   0]
  [203 209 210   0]
  [202 207 209   0]]
 ...
 [[180 194 196   0]
  [182 195 198   0]
  [185 197 200   0]
  ...
  [198 203 206   0]
  [200 206 208   0]
  [198 204 205   0]]]

要获取每个单独的渠道,我们可以使用numpy切片。与Python的列表切片类似,但可在n个维度上使用。这种表示法看起来很混乱,但是如果您查看每个维度的单个切片,则更容易分解。

# [:,      :,      0] 
#   ^ Rows  ^ Cols  ^ Channel
# The colon alone indicates no slicing, so here we select
# all rows, and then all columns, and then 0 indicates we
# want the first channel from the CMYK channels.

c = np_image[:, :, 0]
m = np_image[:, :, 1]
y = np_image[:, :, 2]
k = np_image[:, :, 3]

现在,对于原始CMYK ndarray中的每个通道,我们有四个np_image形状(400、600)。