2013-04-05 9 views
5

रंगीन करने की एक कठोर विधि विधि ग्रेस्केल छवि "रंगीन" की सीधी अगली विधि क्या है। रंगीनकरण से, मेरा मतलब है कि एक नई छवि में तीन आर, जी, बी चैनलों में से एक को ग्रेस्केल तीव्रता मानों को पोर्ट करना।ओपनसीवी: ग्रेस्केल छवि

जब चित्र "नीले" करने के लिए colorized है उदाहरण के लिए I = 50 की तीव्रता के साथ एक 8UC1 ग्रेस्केल पिक्सेल तीव्रता BGR = (50, 0, 0) के 8UC3 रंग पिक्सेल होना चाहिए।

उदाहरण के लिए Matlab, मैं के लिए बस कोड के दो लाइनों के साथ बनाया जा सकता है क्या पूछ रहा हूँ में:

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

लेकिन आश्चर्यजनक मैं OpenCV में समान कुछ भी नहीं मिल सकता है।

उत्तर

4

ठीक है, एक ही बात सी में थोड़ा अधिक काम ++ और 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

ऐसा नहीं है कि सही होने के बाद मैं इस प्रश्न पूछा, मैं 'सीवी :: मर्ज बारे में पता चला()' समारोह और '' सीवी की vector' दिलचस्प है :: चटाई 'और वही किया जो आपने यहां किया था। धन्यवाद। – Bee

3

वहाँ special function to do this कर रहे हैं - applyColorMap OpenCV में contrib मॉड्यूल में v2.4.5 से। वहाँ अलग अलग रंग नक्शे उपलब्ध हैं:

Color maps

+2

मुझे नहीं लगता कि यह वांछित आउटपुट प्राप्त करने में मदद करने के लिए कैसे माना जाता है? जाहिर है, कोई कस्टम रंग मानचित्र परिभाषित नहीं कर सकता है। – Niko

+0

मुझे खेद है। मैं गलत था। – brotherofken

संबंधित मुद्दे