2013-04-05 1 views
5

Qu'est-ce qu'une méthode simple de "colorisation" d'une image en niveaux de gris. En colorisant, je veux dire le portage des valeurs d'intensité en niveaux de gris à l'un des trois canaux R, G, B dans une nouvelle image.OpenCV: Une méthode directe de colorisation d'une image en niveaux de gris

Par exemple, un pixel en niveaux de gris 8UC1 avec une intensité de I = 50 devrait devenir un pixel de couleur 8UC3 d'intensité BGR = (50, 0, 0) lorsque l'image est colorisée à « bleu ».

Dans Matlab par exemple, ce que je demande peut être simplement créé avec deux lignes de code:

color_im = zeros([size(gray_im) 3], class(gray_im)); 
color_im(:, :, 3) = gray_im; 

Mais étonnamment, je ne peux pas trouver quelque chose de semblable dans OpenCV.

Répondre

4

Eh bien, la même chose a besoin d'un peu plus de travail en C++ et OpenCV:

// Load a single-channel grayscale image 
cv::Mat gray = cv::imread("filename.ext", CV_LOAD_IMAGE_GRAYSCALE); 

// Create an empty matrix of the same size (for the two empty channels) 
cv::Mat empty = cv::Mat::zeros(gray.size(), CV_8UC1); 

// Create a vector containing the channels of the new colored image 
std::vector<cv::Mat> channels; 

channels.push_back(gray); // 1st channel 
channels.push_back(empty); // 2nd channel 
channels.push_back(empty); // 3rd channel 

// Construct a new 3-channel image of the same size and depth 
cv::Mat color; 
cv::merge(channels, color); 

ou en fonction (compactée):

cv::Mat colorize(cv::Mat gray, unsigned int channel = 0) 
{ 
    CV_Assert(gray.channels() == 1 && channel <= 2); 

    cv::Mat empty = cv::Mat::zeros(gray.size(), gray.depth()); 
    std::vector<cv::Mat> channels(3, empty); 
    channels.at(channel) = gray; 

    cv::Mat color; 
    cv::merge(channels, color); 
    return color; 
} 
+0

Il est intéressant que juste après avoir posé cette question, j'ai découvert la fonction 'cv :: merge()' et '' vECTOR' de cv :: Mat 'et fait exactement la même chose que vous avez fait ici. Merci. – Bee

3

Il y a special function to do this-applyColorMap dans OpenCV à partir de v2.4.5 en contribution module. Il existe différentes cartes de couleurs disponibles:

Color maps

+2

Je ne vois pas comment cela est censé aider à atteindre la sortie désirée? Évidemment, on ne peut pas définir de cartes de couleurs personnalisées. – Niko

+0

Je suis désolé. J'avais tort. – brotherofken

Questions connexes