2012-05-12 29 views
10

मुझे एक ऐसी छवि मिली है जिसे मैंने स्कैन किया है, लेकिन स्क्रीन पर श्वेत पत्र सफेद नहीं है। क्या पृष्ठभूमि को सफेद बनाने के लिए अनुबंध/चमक को बराबर करने का कोई तरीका है?ओपनसीवी का उपयोग करके छवियों के विपरीत और चमक को मैं कैसे बराबर करूं?

अद्यतन

मैं EmguCV से सुझाव Image._EqualizeHist समारोह की कोशिश की है:

string file = @"IMG_20120512_055533.jpg"; 
Image<Bgr, byte> originalColour = new Image<Bgr, byte>(file); 

Image<Bgr, byte> improved = originalColour.Clone(); 
improved._EqualizeHist(); 

लेकिन एक भी बदतर परिणाम (भी जब पहली ग्रे स्केल) मिलती है:

क्या मुझे अन्य पैरामीटर याद आ रहे हैं?

+1

स्टैक ओवरफ़्लो एक निःशुल्क छवि होस्टिंग सेवा प्रदान करता है, बस टूलबार में छवि बटन पर क्लिक करें और इसे अपने कंप्यूटर पर वेब पर कहीं और स्थानीय रूप से होस्ट की गई छवि पर इंगित करें। यह वास्तव में छवि की प्रतिलिपि अपलोड और प्रतिबिंबित करता है, जो सुनिश्चित करता है कि यह हमेशा उपलब्ध रहेगा, भले ही बाहरी स्रोत नीचे हो। मैंने आपके द्वारा पोस्ट की गई छवियों पर पहले ही स्थानांतरित कर दिया है, लेकिन भविष्य के लिए कुछ ध्यान में रखना है। –

+0

मुझे नहीं पता क्यों, लेकिन समान मामलों में इस तरह के मामलों में अधिक खराब परिणाम देता है .. मुझे भी कभी-कभी यह समस्या होती है .. –

उत्तर

18

मैं कुछ तकनीकों यहाँ पर चर्चा की है: How can I adjust contrast in OpenCV in C?

कृपया इसकी जांच करें।

थ्रेशोल्डिंग एक द्विआधारी छवि देता है: नीचे परिणामों मुझे मिल गया जब मैं अपनी छवि

1) थ्रेशोल्डिंग पर पिछले दो तरीकों की कोशिश की है।

enter image description here

अतिरिक्त:

Morphological closing भी अपने मामले

में अच्छा काम करते हैं कि आप क्या हैं ग्रेस्केल छवि जरूरत आप threshold function

2) लागू कर सकते हैं चाहता हूँ

img = cv2.imread('home.jpg',0) kernel1 = cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(5,5)) close = cv2.morphologyEx(gray,cv2.MORPH_CLOSE,kernel1) div = np.float32(gray)/(close) res = np.uint8(cv2.normalize(div,div,0,255,cv2.NORM_MINMAX)) 

(अजगर एपीआई में कोड) नीचे

परिणाम:

enter image description here

+1

+1 मुझे वास्तव में आपके उत्तर पसंद हैं, अच्छी नौकरी जारी रखें। – karlphillip

+1

धन्यवाद !!!!! –

+0

@AbidRahmanK: क्या आप कृपया अपना कोड मेरे साथ साझा कर सकते हैं? –

5

इसे बराबर कहा जाता है। मुझे इमू में इसका नाम पता नहीं है, लेकिन परिणाम बिल्कुल वही होना चाहिए जो आपको चाहिए - उज्ज्वल पृष्ठभूमि, और गहरा पाठ।

संपादित

केवल किनारों आप बस कैनी आवेदन कर सकते हैं (जो छवि सुधारने तकनीकों से बहुत अलग है) निकालने के लिए। शुरुआत के लिए 20 और 60 के रूप में दो थ्रेसहोल्ड का चयन करें, और फिर उनके बीच 3: 1 के राशन को बनाए रखने (या उन्हें कम करें), जब तक कि आपके पास अच्छी दिखने वाली एज छवि न हो।

5

मैं AdaptiveThreshold उपयोग करने का सुझाव। यह छवि में प्रत्येक पिक्सेल के लिए स्थानीय पड़ोस थ्रेसहोल्डिंग करके काम करता है (यह वास्तव में एक बड़ा सौदा है जब ढाल पृष्ठभूमि हैं, आपकी छवि की तुलना में थोड़ा मजबूत)। blockSize पैरामीटर पड़ोस का आकार है, और संसाधित पिक्सल मान औसत पड़ोस मान शून्य से param1 से अधिक होना चाहिए।

import cv 
im = cv.LoadImage("9jU1Um.jpg", cv.CV_LOAD_IMAGE_GRAYSCALE) 
cv.AdaptiveThreshold(im, im, 255, cv.CV_ADAPTIVE_THRESH_MEAN_C, 
            cv.CV_THRESH_BINARY, blockSize=31, param1=15) 
cv.ShowImage('image', im) 
cv.WaitKey(0) 
-1

किसी भी तरह से, आप भी हर प्रत्येक पिक्सेल की जाँच कर सकते हैं:

enter image description here

यहाँ कैसे अजगर में यह करने के लिए (यह बहुत सी कन्वर्ट करने के लिए आसान होना चाहिए) है। परिभाषित मान से कम होने पर इसे 0 पर सेट करें और परिभाषित मान से अधिक होने पर 255 पर सेट करें।