2013-04-05 4 views
5

Was ist eine unkomplizierte Methode, ein Graustufenbild zu "kolorieren". Indem ich koloriere, meine ich die Portierung der Graustufenintensitätswerte auf einen der drei R-, G-, B-Kanäle in einem neuen Bild.OpenCV: Eine geradlinige Methode zum Einfärben eines Graustufenbildes

Zum Beispiel kann ein Graustufen-Pixel mit 8UC1 Intensität I = 50 soll ein 8UC3 Farbpixel von BGR = (50, 0, 0) Intensität, wenn das Bild zu „blau“ koloriert wird.

In Matlab zum Beispiel, was ich fragen kann mit zwei Zeilen Code einfach erstellt werden: Ich kann alles nicht ähnlich in OpenCV finden

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

Aber erstaunlich.

Antwort

4

Nun, erfordert die gleiche Sache ein bisschen mehr Arbeit in C++ und 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); 

oder als Funktion (verdichtet):

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

Es ist interessant, dass, nachdem ich diese Frage gestellt, fand ich heraus, über die 'cv :: merge()' Funktion und die 'VECTOR' von' cv :: Mat 'und tat genau das Gleiche, was du hier gemacht hast. Vielen Dank. – Bee

3

Es gibt special function to do this-applyColorMap in OpenCV von v2.4.5 in Beitrag Modul. Es gibt verschiedene Farbkarten zur Verfügung:

Color maps

+2

Ich sehe nicht, wie dies dazu beitragen soll, die gewünschte Leistung zu erreichen? Natürlich kann man keine benutzerdefinierten Farbkarten definieren. – Niko

+0

Es tut mir leid. Ich habe mich geirrt. – brotherofken

Verwandte Themen