По-разному раскрашивайте части изображения - PullRequest
1 голос
/ 30 мая 2020

С помощью следующего кода я создаю изображение по частям. Я хотел бы, чтобы каждая из этих частей в конечном итоге была разного цвета. Части не пересекаются.

Я начинаю с черного изображения подходящего размера, а затем постепенно устанавливаю интенсивность пикселей для каждой части, затем нормализую окончательное изображение в градациях серого, расширяю пиксели, чтобы они были видны, создаю соответствующее изображение RGB и, наконец, во время второго l oop я пытаюсь установить цвета для каждой части. Однако в окончательном изображении все части имеют одинаковый цвет.

PS: Вначале я пробовал использовать наложения, но поскольку у меня достаточно изображений, окончательное изображение не отображает все слои должным образом. Фоновые области слоя покрывают переднюю область предыдущего слоя. Маленькое альфа-значение также является проблемой: c.

Двухчастные изображения,

enter image description here

enter image description here

Окончательное изображение после выполнения следующего кода. (игнорировать красный 'x')

enter image description here

Заранее спасибо!

# c is a pandas DataFrame
# example values
#    labels Position X in px    Position Y in px
# 0     2   500                  183
# 1     2   490                  194
# 2     2   504                  197
# 3     2   465                  234
# 4     2   452                  239
# ...   ... ...                  ...
# 46775 7   4015                 3865
# 46776 7   3987                 3871
# 46777 7   3863                 3872
# 46778 7   4051                 3888
# 46779 7   4112                 3879

# 46780 rows × 3 columns

rows, cols = 1, 1
fig = plt.subplots( rows, cols, figsize = ( 20, 20))

shape = ( 4528, 4528)
regions = list( range( 1, 9))
# sns -> seaborn
colors = sns.color_palette( 'pastel', len( regions))
new = np.zeros( shape, dtype = np.float32)
z = zip( regions, centroids, colors)
for l, cnt, col in z:
  tmp = c[ c.labels == l]
  # get (clean) x, y coordinates
  xs, ys = list( tmp[ 'Position X in px']), list( tmp[ 'Position Y in px'])
  new[ xs, ys] = tmp[ p]

new = cv2.normalize( new, None, alpha=0, beta=255, norm_type=cv2.NORM_MINMAX, dtype=cv2.CV_8U)
new = mo.dilation( new, d10)
new3D = cv2.cvtColor( new, cv2.COLOR_GRAY2RGB)
z = zip( regions, centroids, colors)
for l, cnt, col in z:
  tmp = c[ c.labels == l]
  # get (clean) x, y coordinates
  xs, ys = list( tmp[ 'Position X in px']), list( tmp[ 'Position Y in px'])
  new3D[ xs, ys, 0] = new3D[ xs, ys, 0].astype( np.float32) * col[ 0]
  new3D[ xs, ys, 1] = new3D[ xs, ys, 1].astype( np.float32) * col[ 1]
  new3D[ xs, ys, 2] = new3D[ xs, ys, 2].astype( np.float32) * col[ 2]

  plt.subplot( rows, cols, 1)
  plt.imshow( new3D)
  plt.scatter( cnt[ 1], cnt[ 0], s = 100, marker = 'x', color = 'r')
  plt.axis( False)
  plt.tight_layout()
  cv2.imwrite( 'region' + str(l).zfill(2) + '.png', new3D)
  plt.savefig( 'region_fig' + str(l) + '.png', transparent = False)
  plt.scatter( cnt[ 0], cnt[ 1], s = 100, marker = 'x', color = 'k')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...