2012-04-06 8 views
8

कहते हैं कि हम एक छवि हम किसी भी तरह openCV के माध्यम से संशोधित किया था:ओपनसीवी: छवि पर इंद्रधनुष ढाल मानचित्र कैसे लागू करें?

enter image description here

और अब हम यह Gradient Map (like one we can apply via photoshop) को लागू करने के लिए प्यार होता है:

enter image description here

तो मुझे आश्चर्य है कि कैसे ढाल नक्शा लागू करने के लिए (इंद्रधनुष रंग) openCV के माध्यम से?

+1

खैर के बाद विमान, कुछ पता नहीं ओपनसीवी के बारे में, लेकिन प्रक्रिया को दो हिस्सों में विभाजित किया गया है, आरजीबी से ग्रेस्केल तक, और फिर उस ग्रेडिएंट का उपयोग करके ग्रेस्केल वापस आरजीबी तक। पहले भाग के लिए [यहां] (http://nashruddin.com/opencv-examples-for-operation-on-images.html/5) देखें, और [यहां] (http://stackoverflow.com/questions/6686868/opencv-color-mapping-with-direct-pixel-access) दूसरे के लिए। – scientiaesthete

उत्तर

12

पाइथन का उपयोग करके झूठी/छद्म-रंग छवियों को बनाने का एक तरीका यहां है, सी ++ में रूपांतरण बहुत सरल होना चाहिए। अवलोकन:

  1. ग्रेस्केल के रूप में अपनी छवि को खोलें, और आरजीबी
  2. एचएसवी (रंग, संतृप्तता, मूल्य/चमक) रंग अंतरिक्ष में कनवर्ट आरजीबी छवि। यह एक बेलनाकार अंतरिक्ष है, ध्रुवीय अक्ष पर एक ही मूल्य द्वारा प्रतिनिधित्व रंग के साथ।
  3. ग्रेस्केल छवि को ह्यू चैनल सेट करें जिसे हमने पहले ही खोला है, यह एक महत्वपूर्ण कदम है।
  4. मूल्य मान, और संतृप्ति चैनल दोनों अधिकतम मूल्यों पर सेट करें।
  5. वापस आरजीबी स्पेस में कनवर्ट करें (अन्यथा डिस्प्ले गलत होगा)।

कैच हालांकि के एक जोड़े हैं ...

  1. ह्यू के रूप में डिग्री में आयोजित किया जाता है और रंग स्पेक्ट्रम से प्रतिनिधित्व किया है 0 180 (नहीं 0-256 और नहीं 0-360 (कभी-कभी मामला)), हमें 180/256.0
  2. द्वारा गुणा करके ग्रेस्केल छवि को उचित रूप से पुन: सहेजने की आवश्यकता है ओपनसीवी मामले में रंग रंगीन रंग नीले रंग में शुरू होता है (लाल नहीं, आपकी छवि में)। अर्थात। मानचित्रण इस प्रकार है:

से: enter image description here रहे हैं: enter image description here

यदि यह बदलने के लिए हम सभी रंग तत्वों offsetting और लपेटकर उनके आसपास 180 (अन्यथा यह परिपूर्ण होगा) करके कर सकते हैं महत्वपूर्ण है। कोड इस कट ऑफ पॉइंट पर छवि को मास्क करके और फिर उचित रूप से ऑफसेट करके करता है। enter image description here लिए:

से

: का उपयोग कर एक 120 की भरपाई के लिए, अपने colorscale उत्पन्न enter image description here

और छवि संसाधित इस तरह से बहुत अच्छी तरह से (अंत में) तुम्हारा मैच के लिए लगता है।

import cv 

image_bw = cv.LoadImage("TfBmw.jpg", cv.CV_LOAD_IMAGE_GRAYSCALE) 
image_rgb = cv.LoadImage("TfBmw.jpg") 

#create the image arrays we require for the processing 
hue=cv.CreateImage((image_rgb.width,image_rgb.height), cv.IPL_DEPTH_8U, 1) 
sat=cv.CreateImage((image_rgb.width,image_rgb.height), cv.IPL_DEPTH_8U, 1) 
val=cv.CreateImage((image_rgb.width,image_rgb.height), cv.IPL_DEPTH_8U, 1) 
mask_1=cv.CreateImage((image_rgb.width,image_rgb.height), cv.IPL_DEPTH_8U, 1) 
mask_2=cv.CreateImage((image_rgb.width,image_rgb.height), cv.IPL_DEPTH_8U, 1) 

#convert to cylindrical HSV color space 
cv.CvtColor(image_rgb,image_rgb,cv.CV_RGB2HSV) 
#split image into component channels 
cv.Split(image_rgb,hue,sat,val,None) 
#rescale image_bw to degrees 
cv.ConvertScale(image_bw, image_bw, 180/256.0) 
#set the hue channel to the greyscale image 
cv.Copy(image_bw,hue) 
#set sat and val to maximum 
cv.Set(sat, 255) 
cv.Set(val, 255) 

#adjust the pseudo color scaling offset, 120 matches the image you displayed 
offset=120 
cv.CmpS(hue,180-offset, mask_1, cv.CV_CMP_GE) 
cv.CmpS(hue,180-offset, mask_2, cv.CV_CMP_LT) 
cv.AddS(hue,offset-180,hue,mask_1) 
cv.AddS(hue,offset,hue,mask_2) 

#merge the channels back 
cv.Merge(hue,sat,val,None,image_rgb) 
#convert back to RGB color space, for correct display 
cv.CvtColor(image_rgb,image_rgb,cv.CV_HSV2RGB) 

cv.ShowImage('image', image_rgb) 
# cv.SaveImage('TfBmw_120.jpg',image_rgb) 
cv.WaitKey(0) 

आपकी छवि offset = 120 के साथ कार्रवाई की:

enter image description here

+0

@ क्या होगा अगर हम यहां फ़ोटोशॉप के ढाल रंग स्थान का उपयोग करना चाहते हैं जैसे http://www.fudgegraphics.com/2008/10/create-a-realistic-outer-space-scene-in-photoshop/ opencv का उपयोग करके – AHF

0

अब openCV समारोह applyColorMap कहा जाता है जो इस प्रक्रिया को तुच्छ बना देता है मौजूद है।निम्नलिखित कोड चाल

image_cm = cv2.applyColorMap(image, cv2.COLORMAP_JET)) 

करना होगा और यह परिणाम है:

Original plane चित्रा 1: मूल विमान Plane after applying colormap Figure2: रंग मैप लागू करने