c++ - Interpreting color function and adjusting pixels values -
यहाँ परिभाषा है जिसे मैं शुद्ध स्रोत से पढ़ता हूं
1 है
मिडटोन: अंधेरे टोन (ब्लैक), और प्रतिभाशाली टोन (श्वेत) के बीच स्थित। 24 बिट रंग की छवि के लिए, यह तब होता है जब लाल = ग्रीन = ब्लू = 128।
और दूसरा
द्वारा बनाए गए टन 30% और 70% कवरेज के बीच डॉट्स
और
मिडटोन भी रंगों की श्रेणी से संदर्भित करता है जो कि काले रंग के साथ मिश्रित नहीं होते हैं ( छाया) या सफेद (हाइलाइट्स)।
ये परिभाषा से मुझे क्या मिला है कि पिक्सल जिसका मूल्य 0 या 255 हैं, उन्हें उन्हें 128 पर समायोजित करना चाहिए क्या मैं परिभाषा सही ले रहा हूँ? मैं हिस्टोग्राम समताकरण के तरीके का उपयोग नहीं करना चाहता हूं जैसा कि मेरे ज्ञान के मुताबिक यह छवि की चमक के लिए भी प्रयोग किया जाता है
मैं नीचे की तरह कार्य करना चाहता हूं, जैसे कि मैं इस फ़ंक्शन को
ओपनसीवी सी ++ लेकिन मुझे मिडटाउन और सीवाईएमके के मूल्यों से निपटने का विचार नहीं है क्योंकि इसके साथ ही आरजीबी और सीएमवाइके दोनों एक ही समय में हैं
उदाहरण के लिए नमूना छवि
उपरोक्त मानों को लागू करने के बाद
मैं ओपनसीवी में ऐसा ही करना चाहता हूं
मेरी चिंता केवल परिणाम के साथ है अगर हम यह केवल आरजीबी के साथ कर सकता है
संपादित करें
एंड्री से उत्तर अच्छा है, लेकिन अभी भी सबसे अच्छा जवाब देने के लिए इंतजार कर रहा है क्योंकि यह उत्तर अन्य छवियों के समायोजन के लिए कठिन है रंग संतुलन के अन्य मूल्य
मुझे लगता है कि इस मामले में, छाया, मिडटोन और हाइलाइट्स ट्रैकबर्स मान की सीमा को परिभाषित करता है।
- हाइट्स - भारी समायोजन (विस्तृत श्रृंखला)।
यह तेज और सटीक रंग सुधार की अनुमति देता है।
कोड स्निपेट:
#include & lt; iostream & gt; #include & lt; vector & gt; # शामिल करें & lt; stdio.h & gt; #include & lt; कार्यात्मक & gt; # शामिल करें & lt; एल्गोरिथम & gt; # शामिल करें & lt; संख्यात्मक & gt; # शामिल करें & lt; cstddef & gt; #include "opencv2 / opencv.hpp" नामस्थान std का उपयोग कर; नामस्थान cv का उपयोग करना; Int val_Cyan_Red = 0; Int val_Magenta_Green = 0; Int val_Yellow_Blue = 0; परिणाम का परिणाम; मैट इमग; शून्य on_trackbar (int, शून्य *) {float SH = 0.1; // ट्रैकबार का स्तर (समायोजन मोड शेडोज / मिडटोन / हाइलाइट्स पर निर्भर करता है) फ्लोट क्र_वल = (फ़्लोट) val_Cyan_Red / 255.0; Float mg_val = (फ्लोट) val_Magenta_Green / 255.0; नाव yb_val = (फ्लोट) val_Yellow_Blue / 255.0; // Cyan_Red फ्लोट आर 1 = 0; फ्लोट जी 1 = 1; फ्लोट बी 1 = 1; फ्लोट आर 2 = 1; फ्लोट जी 2 = 0; फ्लोट बी 2 = 0; फ्लोट डीआर = (1-क्रैवल) * आर 1 + (क्रैवल) * आर 2-0.5; फ्लोट डीजी = (1-क्रैवल) * जी 1 + (क्र_वाल) * जी 2-0.5; फ्लोट डीबी = (1-क्रैवल) * बी 1 + (क्र_वाल) * बी 2-0.5; परिणाम = Img + (अदिश (DB, डीजी, डीआर) * एसएच); // Magenta_Green R1 = 1; G1 = 0; बी 1 = 1; आर 2 = 0; G2 = 1; बी 2 = 0; डॉ = (1-mg_val) * R1 + (mg_val) * R2-0.5; डीजी = (1-mg_val) * G1 + (mg_val) * G2-0.5; डीबी = (1-mg_val) * बी 1 + (mg_val) * B2-0.5; परिणाम + = (अदिश (DB, डीजी, डीआर) * एसएच); // येलो_B लियू आर 1 = 1; G1 = 1; बी 1 = 0; आर 2 = 0; G2 = 0; बी 2 = 1; डॉ = (1-yb_val) * R1 + (yb_val) * R2-0.5; डीजी = (1-yb_val) * G1 + (yb_val) * G2-0.5; डीबी = (1-yb_val) * बी 1 + (yb_val) * B2-0.5; परिणाम + = (अदिश (DB, डीजी, डीआर) * एसएच); imshow ( "परिणाम", परिणाम); waitKey (10); } // --------------------------------- // // ---------- ----------------------- एट मुख्य (इंट आर्जैक, चार ** argv) {नामित विंडू ("छवि", सीवी: WINDOW_NORMAL); namedWindow ( "परिणाम"); Img = imread ( 'डी: \\ ImagesForTest \\ cat2.jpg ", 1); Img.convertTo (Img, CV_32FC1,1.0 / 255.0); बनाओट्रैकरबार ("साइनआरड", "छवि", और वाल्काएन_आरईडी, 255, ऑन_ट्रैकर); CreateTrackbar ("MagentaGreen", "छवि", & amp; val_Magenta_Green, 255, on_trackbar); बनाओट्रेकबार ("पीलाबल्लू", "छवि", और वाल_ येलो_ब्लू, 255, ऑन_ट्रैकर); imshow ( "छवि", Img); waitKey (0); }
ऊपर के लगभग मूल्यों के लिए ये परिणाम (शून्य ऑफसेट 128 है):
Comments
Post a Comment