У меня есть массив кортежей rgb
array = [(144, 144, 133), (85, 87, 75), (140, 87, 70), (129, 107, 105), (129, 107, 105), (194, 179, 171), (178, 164, 159), (100, 105, 122), (36, 38, 57), (59, 48, 49), (59, 48, 49), (152, 149,
148), (152, 149, 148), (0, 0, 0), (0, 0, 0), (98, 81, 84)...]
который я хотел бы сделать квадратной формы и изменить на изображение PIL.
dt = np.dtype('int,int,int')
array2d = np.array(array, dt)
im_pil = Image.fromarray(obj=array2d.reshape(int(math.sqrt(size)), int(math.sqrt(size))), mode='RGB')
data = io.BytesIO()
im_pil.save(data, "bmp")
по какой-то неизвестной мне причине он разделяет каждое число, например. (144,144,133) -> (144,0,0), (0,144,0), (0,0,133), (0,0,0)
Является ли моя проблема формой исходного массива? Или модификация вокруг него? Любые идеи? конечно, я пробовал np.array(array, np.uint8) та же проблема
Заранее спасибо.






Я полагаю, что наша проблема заключается в вашей функции изменения формы. Вы преобразуете свой массив в двумерный массив формы [sqrt(size),sqrt(size)]. Вместо этого вам нужен трехмерный массив формы [sqrt(size),sqrt(size),3] (размер x, размер y, 3 значения RGB).
Чтобы решить вашу проблему, вы должны сделать
im_pil = Image.fromarray(obj=array2d.reshape(int(math.sqrt(size)), int(math.sqrt(size)),3), mode='RGB')
вместо этого:
im_pil = Image.fromarray(obj=array2d.reshape(int(math.sqrt(size)), int(math.sqrt(size))), mode='RGB')
Попробуй это:
arr3d = arr.reshape(2,3,2)
Image.fromarray(arr3d,'RGB').show()
Эй, спасибо за совет. Разве я не потерял бы цвета при использовании режима = «L» вместо RGB? L означает яркость (оттенки серого)?
Да, извините, не обратил внимания.
Привет. Просто используйте вашу функцию, которую она мне дала: не могу преобразовать массив размером 25 в форму (5,5,3), но когда я дополнительно изменил array2d = np.array(array, dt) на array2d = np.array(array, np. uint8) наконец-то заработало! СПАСИБО!