Я написал класс с именем PatternGenerator. Предполагается написать изображение с заданным цветным рисунком (или диаграммой). Примерно так:
После получения цветного рисунка в CieLAB как numpy .ndarray с формой (1, x, 3) [где x будет количеством цветов (по 3 канала в каждом)], я преобразовал в RGB, выполнив cv2.cvtColor (pattern, cv2.COLOR_LAB2RGB) . Конечно, я получил числа между [0, 1], поэтому я умножил на 255.
Затем я попытался написать изображение, выполнив следующее:
image = np.zeros((self.color_size * self.cols, self.color_size * self.rows, 3))
for x in pattern[0]:
color = x.astype(int).tolist()
for i in range(self.cols):
for j in range(self.rows):
cv.rectangle(image, (i * self.color_size, j * self.color_size),
(i * self.color_size + self.color_size, j * self.color_size + self.color_size),
color, thickness = cv2.FILLED)
cv2.imwrite('result.png', image)
self .color_size : будет размер в пикселях цветного квадрата.
Теперь возникает проблема. Дело в том, что если вместо color я поставлю, скажем, что-то вроде (i ** 2, j ** 2, i + j), он работает совершенно нормально (у этих цветов нет смысл, это было только для тестирования). НО, если я введу переменную color , которая обозначает преобразование LAB2RGB, за которым следует приведение к int (я также пробовал np.uint8, np.int, np.uint16), а затем Python список (я сделал все это, потому что меня об этом просили ошибки), он выводит серое изображение. Никакого прямоугольника любого типа, хотя при печати чисел (их каналов) все цвета были совершенно разными.
С другой стороны, я попробовал что-то другое. Мой чистый подход numpy был примерно таким:
def _concatenate_colors(self, colors: list) -> np.ndarray:
image = []
for x in colors[0]:
color = np.full((self.color_size, self.color_size, 3), x)
image.append(color)
Теперь, если я преобразую в numpy .ndarray, я получу (n_colors, self.color_size, self.color_size, 3) . И я застрял здесь. По сути, я не знаю, как преобразовать это в (self.color_size * self.cols, self.color_size * self.rows, 3) при сохранении каждого квадрата в целости.
редактировать: я пытался Конвертация BGR также. Он должен был по крайней мере интерпретировать другие цвета. Но я получил серое изображение.
Любой другой метод, уже доступная функция, о которой я не знаю ... приветствуется. Спасибо за чтение.