2013-04-05 4 views
5

Che cos'è un metodo semplice per "colorare" un'immagine in scala di grigi. Con la colorazione, intendo il porting dei valori di intensità della scala di grigi su uno dei tre canali R, G, B in una nuova immagine.OpenCV: un metodo semplice per colorare un'immagine in scala di grigio

Per esempio un pixel in scala di grigi 8UC1 con intensità di I = 50 dovrebbe diventare un pixel 8UC3 colore di intensità BGR = (50, 0, 0) quando l'immagine è colorized per "blu".

In Matlab, per esempio, quello che sto chiedendo può essere semplicemente realizzato con due righe di codice:

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

Ma sorprendentemente non riesco a trovare niente di simile in OpenCV.

risposta

4

Beh, la stessa cosa richiede un po 'più di lavoro in C++ e 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); 

o come una funzione (compattato):

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

E 'interessante il fatto che subito dopo ho fatto questa domanda, ho scoperto che il cv :: merge() 'funzione e il' 'VECTOR' di cv :: Mat 'e ha fatto esattamente la stessa cosa che hai fatto qui. Grazie. – Bee

3

ci sono special function to do this-applyColorMap in OpenCV dalla v2.4.5 nel modulo contrib. Ci sono diverse mappe di colore disponibili:

Color maps

+2

Non vedo come questo dovrebbe aiutare a raggiungere l'output desiderato? Ovviamente, non è possibile definire mappe colori personalizzate. – Niko

+0

Mi dispiace. Mi sbagliavo. – brotherofken

Problemi correlati