Какой самый простой способ установить прозрачность пикселей одного изображения? - PullRequest
1 голос
/ 05 февраля 2020

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

ИЗОБРАЖЕНИЕ : IMAGE HERE

Это изображение было сделано со следующим кодом:

plt.imshow(terrain,cmap='magma')

, где terrain - это размерное (n, n) NumPy массив и terrain[i,j] в range(0,9).

Ответы [ 2 ]

2 голосов
/ 05 февраля 2020

Вы можете создать изображение RGBA из целочисленного массива и используемой вами цветовой карты, а затем установить для альфа-канала значение 0 для значения, для которого вы хотите иметь прозрачность. И затем вы можете установить transparent=True в команде Matplotlib savefig.

Вот фрагмент кода:

import numpy as np
from matplotlib import pyplot as plt

# Mockup data
terrain = np.zeros((200, 200), np.uint8)
terrain[20:180, 20:180] = np.random.randint(0, 10, (160, 160))

# Generate RGBA image from colormapped grayscale data
cmap = plt.get_cmap('magma')
rgba_img = (cmap(terrain / np.max(terrain)) * 255).astype(np.uint8)

# Set alpha channel to 0 for all 0 values in terrain
rgba_img[:, :, 3] = (terrain > 0) * 255

# Output with transparency
plt.figure(0, figsize=(5, 5))
plt.imshow(rgba_img)
plt.axis('off')
plt.tight_layout()
plt.savefig('output.png', transparent=True)

Выходные данные выглядят следующим образом:

Output

Надеюсь, это поможет!

----------------------------------------
System information
----------------------------------------
Platform:    Windows-10-10.0.16299-SP0
Python:      3.8.1
Matplotlib:  3.2.0rc1
NumPy:       1.18.1
----------------------------------------
1 голос
/ 05 февраля 2020

После проверки я замечаю, что черные пиксели на вашем изображении не полностью черные. В любом случае вы можете попробовать это:

from matplotlib import pyplot as plt
import numpy as np
import cv2
img = cv2.imread('test.png')
img_alpha = cv2.cvtColor(img, cv2.COLOR_BGR2BGRA)
img_alpha[np.where((img==[3,0,0]).all(axis=2))] = [3,0,0,0]
plt.imshow(img_alpha,cmap='magma')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...