2013-04-05 13 views
5

Co to jest prosta metoda "kolorowania" obrazu w skali szarości. Przez kolorowanie mam na myśli przeniesienie wartości intensywności skali szarości do jednego z trzech kanałów R, G, B w nowym obrazie.OpenCV: prosta metoda kolorowania obrazu w skali szarości.

Na przykład piksel 8UC1 skali szarości z intensywnością I = 50 powinna stać się piksel 8UC3 kolor intensywności BGR = (50, 0, 0), gdy obraz jest pokolorowane na „niebieski”.

w MATLAB na przykład, co pytam może być po prostu stworzona z dwóch linii kodu:

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

Ale zaskakująco nie mogę znaleźć coś podobnego w OpenCV.

Odpowiedz

4

Cóż, to samo wymaga nieco więcej pracy w C++ i 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); 

lub jako funkcja (zagęszczonej):

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

To ciekawe, że tuż po tym, jak zadał to pytanie, ja dowiedziałem się o 'cv :: merge()' funkcję i '' vector' z cv :: Mat 'i zrobił dokładnie to samo co tutaj. Dzięki. – Bee

3

Istnieją special function to do this - applyColorMap w OpenCV z v2.4.5 w module contrib. Istnieją różne mapy kolor dostępny:

Color maps

+2

Nie widzę, w jaki sposób ma to pomóc w osiągnięciu pożądanej wydajności? Oczywiście nie można definiować niestandardowych map kolorów. – Niko

+0

Przepraszam. Myliłem się. – brotherofken

Powiązane problemy