На Python после преобразования RGB в CMY формируется чёрное изображение

Есть какое-то изображение RGB, мы из него делаем трёхмерный массив(матрицу), после чего делаем преобразование из RGB в CMY и полученные значения записываем в новую матрицу и сохраняем как изображение. После того как сохранил новое изображение, получил просто черную картинку, хотя если вывести трёхмерную матрицу значений полученного изображения можно увидеть, что значения пикселей явно не нулевые. Недавно я задавал подобный вопрос c подобной проблемой, но там было изображение в тонах серого и ограничивалось всё добавлением параметра dtype = 'uint8' при создании новой матрицы типа Numpy для получения конечного изображения. Но тут я не могу понять: ошибка в алгоритме преобразования RGB в CMY(но это не самое важное, алгоритм можно исправить), или же чего-то не хватает при создании новой матрицы, или не правильно сохраняю новое изображение?

from PIL import Image
import numpy as np

img_rgb = Image.open('s.png')
rgb_matr = np.asarray(img_rgb.convert('RGB'))
print(rgb_matr.shape)
rgb_rows, rgb_cols, rgb_d = rgb_matr.shape
cmyk_matr = np.zeros(shape = (rgb_rows, rgb_cols, rgb_d), dtype = 'uint8')

RGB_coeff = 255
CMYK_coeff = 100

def rgb_to_cmyk(*args):
    r = args[0]
    g = args[1]
    b = args[2]

    if(r, g, b) == (0, 0, 0):
        return 0, 0, 0

    c = 1 - r / RGB_coeff
    m = 1 - g / RGB_coeff
    y = 1 - b / RGB_coeff

#   min_cmy = min(c, m, y)
#   c = (c - min_cmy)/(1 - min_cmy)
#   m = (m - min_cmy)/(1 - min_cmy)
#   y = (y - min_cmy)/(1 - min_cmy)
#   k = min_cmy

    return int(c * CMYK_coeff), int(m * CMYK_coeff), int(y * CMYK_coeff)

for item1 in rgb_matr:
    i = 0
    for item2 in item1:
        j = 0
        cmyk_matr[i][j] = np.asarray(rgb_to_cmyk(*item2), dtype = 'uint8')
        print(cmyk_matr[i][j])
        j += 1
    i += 1

img_cmy = Image.fromarray(cmyk_matr)
img_cmy.save('CMY.png')

Ответы (1 шт):

Автор решения: WasdeD Geek

АХхаха я понял, всё было на много проще. Нужно было объявить i и j до циклов for соответственно)))

i = 0
for item1 in rgb_matr:
    j = 0
    for item2 in item1:
        cmyk_matr[i][j] = np.asarray(rgb_to_cmyk(*item2))
        print(cmyk_matr[i][j])
        j += 1
    i += 1
→ Ссылка