2015-02-17 3 views
2

У меня есть матрица со значениями от 0 до 1000, я могу легко масштабировать значения до диапазона 0 ~ 255, и это изображение в оттенках серого, если я покажу матрицу в opencv из Python.Создать цветное изображение из изображения в оттенках серого

Вопрос заключается в том, как преобразовать матрицу {Dimensions = (m, n)} в трехслойную матричную матрицу {Dimensions = (m, n, 3)}?

Это, как преобразовать изображение в оттенках серого в цветное изображение?

Я сделал эту функцию, но она не работает

import matplotlib.pyplot as plt 
from itertools import product 

def convertPicturetoColor(self, image, cmap=plt.get_cmap('rainbow')): 
    ''' 
    Converts a greyscale [0~255] picture to a color picture 
    ''' 
    a, b = np.shape(image) 
    m = np.zeros((a, b, 3)) 
    for i, j in product(xrange(a), xrange(b)): 
     m[i,j,:] = np.array(cmap(image[i,j]))[0:3] 
    return m 

ответ

2
>>> help(cv2.applyColorMap) 
Help on built-in function applyColorMap: 

applyColorMap(...) 
    applyColorMap(src, colormap[, dst]) -> dst 

и вот карта перечислений:

COLORMAP_AUTUMN = 0 
COLORMAP_BONE = 1 
COLORMAP_COOL = 8 
COLORMAP_HOT = 11 
COLORMAP_HSV = 9 
COLORMAP_JET = 2 
COLORMAP_OCEAN = 5 
COLORMAP_PINK = 10 
COLORMAP_RAINBOW = 4 
COLORMAP_SPRING = 7 
COLORMAP_SUMMER = 6 
COLORMAP_WINTER = 3 

так, просто:

dst = cv2.applyColorMap(src, cv2.COLORMAP_RAINBOW) 

enter image description here

+1

К сожалению 'cv2.applyColorMap (Greyscale_picture, cv2.COLORMAP_RAINBOW)' возвращает изображение с одним слоем (тоже серого цвета) вместо 3-слойного изображения, что я ожидаю –

+3

Входная матрица должна быть типа 'uint8' работать. Кроме того, он работает. –

+0

о, извините, да. забыл упомянуть об этом. – berak

Смежные вопросы