Как заставить matplotlib записать определенные c значения RGB в каждый пиксель в массиве numpy? - PullRequest
0 голосов
/ 21 февраля 2020

У меня есть код, который генерирует изображения с закрашенными кружками, которые могут быть одного из 10 цветов, используя plt.fill, с координатами X и Y, равными circle за один раз от circle_list:

for i in range(0, R.shape[0]):
   radius = R[i]
   circle = circle_list[i]
   color = assigned_colors[i]
   plt.fill(circle[:, 0], circle[:, 1], facecolor=color)

assigned_colors - это список той же длины, что и R.shape[0] (общее количество нарисованных кругов) с одним из цветов, указанных в color_list:

color_list = [(.14,.33,.49), (.08,.41,.27), (.37,.76,.35), (.92,.58,.13),
              (.90,.25,.09), (.96,.75,.12), (.74,.09,.15), (.80,.76,.56), 
              (.56,.70,.72), (.77,.71,.76)]

Затем я сохраняю это image as a numpy ndarray:

plt.savefig('test.png', dpi=350)
arr = np.fromstring(fig.canvas.tostring_rgb(), dtype=np.uint8, sep='')
arr = arr.reshape(fig.canvas.get_width_height()[::-1] + (3,))
np.save('arr.npy', arr)

Все это прекрасно работает, но для некоторого анализа я бы хотел использовать уникальные значения RGB, указанные для заполнения кругов, в качестве уникальных идентификаторов. Однако, когда я загружаю массив и смотрю на уникальные цвета, я наблюдаю много больше, чем ожидалось:

circles_npy = np.load('./arr.npy')
len(np.unique(circles_npy.reshape(-1, circles_npy.shape[2]), axis=0))

>>> 2854

Если я рисую изображение, оно визуально выглядит как 10 цветов Я указал нарисованные, но почему значения RGB такие разные? Есть ли способ заставить matplotlib использовать только эти точные значения плюс цвет фона? Я ожидал, что это вернет 11 (для 10 возможных цветов плюс белый фон. Я не понимаю, что здесь происходит и как я могу использовать цвета в качестве меток в массиве? В идеале то, что я ищу, является уникальным значением за каждый цвет в массиве изображений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...