2013-04-05 407 views
5

グレースケール画像を「カラー化」する方法は何ですか?カラー化すると、新しい画像の3つのR、G、Bチャンネルの1つにグレースケールの輝度値を移植することを意味します。画像は「青」に色付けときOpenCV:グレースケール画像を色付けする方法。

例えばI = 50の強度に8UC1グレースケールピクセルは、強度​​の8UC3カラー画素となるべきです。

はMatlabのでは、たとえば、どのような私が求めているが、単純に2行のコードを使用して作成することができます。

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

しかし、驚くほど、私はOpenCVの中に似た何かを見つけることができません。

答えて

4

まあ、同じことは、C++や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); 

または機能(圧縮された)のように: - applyColorMap OpenCVのに

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

それは私がこの質問をした直後、私は 'CV ::マージ()'関数と '品種の' vector'知ったことは興味深いです::マットあなたがここでやったのとまったく同じことをしました。ありがとう。 – Bee

3

special function to do thisがあります。 v2.4.5より投稿モジュール。異なるカラーマップが利用可能があります。

Color maps

+2

これがどのようにして所望の出力を達成するのに役立つのか分かりませんか?明らかに、カスタムカラーマップを定義することはできません。 – Niko

+0

すみません。私は間違っていた。 – brotherofken

関連する問題