С помощью следующего кода я создаю изображение по частям. Я хотел бы, чтобы каждая из этих частей в конечном итоге была разного цвета. Части не пересекаются.
Я начинаю с черного изображения подходящего размера, а затем постепенно устанавливаю интенсивность пикселей для каждой части, затем нормализую окончательное изображение в градациях серого, расширяю пиксели, чтобы они были видны, создаю соответствующее изображение RGB и, наконец, во время второго l oop я пытаюсь установить цвета для каждой части. Однако в окончательном изображении все части имеют одинаковый цвет.
PS: Вначале я пробовал использовать наложения, но поскольку у меня достаточно изображений, окончательное изображение не отображает все слои должным образом. Фоновые области слоя покрывают переднюю область предыдущего слоя. Маленькое альфа-значение также является проблемой: c.
Двухчастные изображения,
![enter image description here](https://i.stack.imgur.com/5sl2S.jpg)
![enter image description here](https://i.stack.imgur.com/nvVdC.jpg)
Окончательное изображение после выполнения следующего кода. (игнорировать красный 'x')
![enter image description here](https://i.stack.imgur.com/NsPQO.png)
Заранее спасибо!
# 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')