преобразовать изображение в массив rgb и преобразовать его в массив CMYK, используя python - PullRequest
0 голосов
/ 15 октября 2018

Я пытаюсь преобразовать изображение в массив cmyk и разделить значения Cyan, Magentha, Yellow, Black. Возможно ли это с помощью python. Как преобразовать изображение в массив Rgb, а затем в cmyk?

изИмпорт PIL Image

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

пикселей = список (im.getdata ())

печать (в пикселях)

Я попробовал приведенный выше код, но ide застрял после запуска кода. Есть ли какая-либо ошибка в этом коде? (В приведенном выше коде я просто печатаю только массив rgb).

1 Ответ

0 голосов
/ 15 октября 2018

Преобразовать в 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]

Теперь у нас есть четыре ndarray формы (400, 600) длякаждый из каналов в оригинале CMYK np_image.

...