2013-04-05 174 views
5

什麼是「着色」灰度圖像的直接方法。通過着色,我的意思是將灰度強度值移植到新圖像中的三個R,G,B通道中的一個。OpenCV:將灰度圖像着色的直接方法

例如,當圖像被着色爲「藍色」與I = 50強度8UC1灰度像素應該成爲強度​​的8UC3彩色像素。

在Matlab中的例子,就是我要問的可以用兩行代碼簡單地創作:

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); 

或(壓縮)功能:

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 ::合併()'函數和CV的'了'VECTOR' ::墊'並且做了和你一樣的事情。謝謝。 – Bee 2013-04-06 15:59:57

3

special function to do this - 在OpenCV中applyColorMap從v2.4.5中的contrib模塊。有不同顏色可供地圖:

Color maps

+2

我不明白這應該如何幫助實現所需的輸出?顯然,我們無法定義自定義顏色映射。 – Niko 2013-04-08 06:47:16

+0

對不起。我錯了。 – brotherofken 2013-04-08 06:50:22