我正在尝试将图像转换为cmyk数组并分离青色,Magentha,黄色和黑色值。是否可以使用python。如何将图像转换为Rgb数组然后转换为cmyk?
从PIL导入图像
im = Image.open('apple.png')
pixels = list(im.getdata())
打印(像素)
我尝试了上面的代码,但是运行代码后ide被卡住了。该代码有任何错误吗?(在上面的代码中我只打印了rgb数组)。
答案 0 :(得分:2)
转换为CMYK:
im = Image.open('apple.png').convert('CMYK')
我建议使用numpy
(通常导入为np
)来处理像素数据。两者之间的转换很简单。
Image
-> ndarray
:np.array(Image)
ndarray
-> Image
:Image.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)。