Python Изображение в оттенках серого в RGB - PullRequest
1 голос
/ 26 мая 2020

У меня есть изображение в оттенках серого в виде массива numpy со следующими свойствами:

shape = ( 3524, 3022), dtype = float32, min = 0.0, max = 1068.16

Серое изображение, построенное как plt.imshow( gray, cmap = 'gray, vmin = 0, vmax = 80), выглядит так:

enter image description here

, и я хочу преобразовать его в RGB. Я пробовал несколько способов, например np.stack, cv2.merge, cv2.color, создавая трехмерное изображение np.zeros и назначая каждому каналу изображение в градациях серого. Когда я рисую трехмерное изображение, я получаю очень тусклое изображение, и «капли» не видны вообще. Я также пытался преобразовать его диапазон в [0, 1] или [0, 255] диапазон не доступен.

Используя np.stack plt.imshow( np.stack(( new,)*3, axis = 2)), я получаю следующее:

enter image description here

Что мне делать? Заранее спасибо!

Ответы [ 2 ]

2 голосов
/ 27 мая 2020

Один из способов нормализовать изображение - использовать cv2.normalize с norm_type = cv2.NORM_MINMAX. Он будет растягивать или сжимать ваши данные до диапазона от 0 до 255 (с использованием аргументов альфа и бета) и сохранять как 8-битный тип.

# normalize
norm = cv2.normalize(gray, None, alpha=0, beta=255, norm_type=cv2.NORM_MINMAX, dtype=cv2.CV_8U)
print(norm.shape, norm.dtype)

# convert to 3 channel
norm = cv2.cvtColor(norm, cv2.COLOR_GRAY2BGR)
print(norm.shape, norm.dtype)
print(np.amin(norm),np.amax(norm))
1 голос
/ 26 мая 2020

Передавая vmin=0,vmax=80 в plt.imshow, вы в основном обрезаете изображение и масштабируете его. Так что вы можете просто сделать это:

gray_normalized = gray.clip(0,80)/80 * 255

# stack:
rgb = np.stack([gray_normalized]*3, axis=2)

cv2.imwrite('output.png', gray_normalized)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...