पूर्णांकों के रूप में आरजीबी रंग सीमा को देखते हुए; कार्य आरजीबी रंग श्रेणी को परिवर्तित करके इसके उपयुक्त एचएसवी रंग को खोजना है
RGB कलर मॉडल क्या है
RGB रंग मॉडल में तीन रंग लाल, हरा और नीला शामिल हैं। आरजीबी मॉडल एक रंग मॉडल है जिसका व्यापक रूप से प्रदर्शन प्रौद्योगिकियों में उपयोग किया जाता है; यह एक एडिटिव मॉडल है जिसमें हम डिस्प्ले डिवाइस पर लाखों अलग-अलग रंगों का उत्पादन करने के लिए अलग-अलग तीव्रता के इन तीन रंगों को जोड़ते हैं।
HSV कलर मॉडल क्या है?
HSV रंग मॉडल में Hue, Saturation, Value को HSB (Hue, Saturation, Brightness) के रूप में भी जाना जाता है। HSV RGB रंग मॉडल का वैकल्पिक प्रतिनिधित्व है। यह इस तरह से संरेखित है कि मानव दृष्टि रंग बनाने की विशेषताओं को कैसे मानती है। यह रंग मॉडल अक्सर कलाकारों द्वारा इसकी प्राकृतिक रंग योजना के कारण उपयोग किया जाता है। HSV के तीन गुण योगात्मक और घटाव दोनों हो सकते हैं।
कार्यक्रम में हमें क्या करना है
हमें आरजीबी मॉडल मूल्यों के उपयोगकर्ता से इनपुट लेना होगा और फिर गणितीय रूप से एचएसवी रंग मॉडल में आउटपुट की गणना करनी होगी।
उदाहरण
इनपुट:आर =31, जी =52, बी =29आउटपुट:एच एस वी =(114.782608, 44.230770, 20.392157) /पूर्व>दी गई समस्या को हल करने के लिए हम जिस दृष्टिकोण का उपयोग करेंगे -
- इनपुट को 3 रंगों में लेना लाल (आर), हरा (जी) और नीला (बी)।
- सभी रंग मानों को 255 से विभाजित करना।
- अब cmax, cmin और अंतर की गणना करें।
- जांचें -
- यदि सीमैक्स और सेमीमिन 0 के बराबर है, तो ह्यू या एच 0 होगा।
- यदि cmax लाल (r) के बराबर है तो ह्यू (h) =(60 * ((g – b) / diff) + 360)% 360।
- यदि cmax हरा (g) के बराबर है तो ह्यू (h) =(60 * ((b - r) / diff) + 120)% 360.
- यदि सीमैक्स ब्लू (बी) के बराबर है तो ह्यू (एच) =(60 * ((आर – जी) / डिफ) + 240)% 360।
- संतृप्ति का पता लगाने के लिए हम जाँच करेंगे −
- यदि cmax =0 तो संतृप्ति (s) =0.
- यदि cmax शून्य के बराबर नहीं है तो संतृप्ति (s) =(diff/cmax)*100
- मूल्य गणना -
- मान (v) =cmax *100
एल्गोरिदम
स्टार्टस्टेप 1 -> फंक्शन में फ्लोट मैक्स (फ्लोट ए, फ्लोट बी, फ्लोट सी) रिटर्न (ए> बी)? (ए> सी? ए:सी):(बी> सी? बी:सी) चरण 2 -> समारोह में फ्लोट मिनट (फ्लोट ए, फ्लोट बी, फ्लोट सी) रिटर्न (ए <बी)? (ए <सी? ए:सी):(बी <सी? बी:सी) चरण 3 -> समारोह में int rgb_to_hsv (फ्लोट आर, फ्लोट जी, फ्लोट बी) घोषित फ्लोट एच, एस, वी सेट आर =आर / 255.0 सेट जी =जी / 255.0 सेट बी =बी / 255.0 सेट सीमैक्स =अधिकतम (आर, जी, बी) सेट सीमिन =मिनट (आर, जी, बी) सेट डिफ =सीमैक्स-सेमिन अगर सीमैक्स ==सेमीिन तो, सेट एच =0 समाप्त करें यदि अन्यथा cmax ==r तो, सेट h =fmod ((60 * ((g - b) / diff) + 360), 360.0) अन्य समाप्त करें यदि cmax ==g तो, सेट h =fmod ( (60 * ((b - r) / diff) + 120), 360.0) समाप्त करें यदि अन्यथा cmax ==b तो, सेट h =fmod ((60 * ((r - g) / diff) + 240), 360.0) अन्य समाप्त करें यदि cmax ==0 तो, सेट s =0 समाप्त यदि अन्य सेट s =(diff / cmax) * 100 अंत अन्य v =cmax * 100; प्रिंट h, s, v चरण 4 -> int main(int argc, char const *argv[]) घोषित करें और आरंभ करें r =45, g =215, b =0 कॉल फ़ंक्शन rgb_to_hsv(r, g, b)Stop
उदाहरण
#include#include फ्लोट मैक्स (फ्लोट ए, फ्लोट बी, फ्लोट सी) {रिटर्न ((ए> बी)? (ए> सी? ए:सी):(बी> सी? बी:सी));}फ्लोट मिनट (फ्लोट ए, फ्लोट बी, फ्लोट सी) {रिटर्न ((ए <बी)? (ए <सी? ए:सी):(बी <सी? बी:सी) );}int rgb_to_hsv(float r, float g, float b) {// R, G, B मानों को 255 // से विभाजित किया जाता है ताकि 0..255 से 0..1 की सीमा बदली जा सके:फ्लोट h, s, वी; आर / =255.0; जी / =255.0; बी / =255.0; फ्लोट सीमैक्स =अधिकतम (आर, जी, बी); // अधिकतम आर, जी, बी फ्लोट सेमीिन =मिनट (आर, जी, बी); // न्यूनतम आर, जी, बी फ्लोट अंतर =सीमैक्स-सेमिन; // cmax और cmin का अंतर। अगर (सीमैक्स ==सेमी) एच =0; और अगर (सीमैक्स ==आर) एच =एफएमओडी ((60 * ((जी - बी) / अंतर) + 360), 360.0); और अगर (सीमैक्स ==जी) एच =एफएमओडी ((60 * ((बी - आर) / अंतर) + 120), 360.0); और अगर (सीमैक्स ==बी) एच =एफएमओडी ((60 * ((आर - जी) / अंतर) + 240), 360.0); // अगर सीमैक्स बराबर शून्य अगर (सीमैक्स ==0) एस =0; अन्य s =(diff / cmax) * 100; // गणना वी वी =सीमैक्स * 100; प्रिंटफ ("एच एस वी =(% एफ,% एफ,% एफ) \ n", एच, एस, वी); वापसी 0;}//मुख्य कार्यमुख्य (int argc, char const *argv[]) { int r =45, g =215, b =0; rgb_to_hsv (आर, जी, बी); वापसी 0;}
आउटपुट
h s v=(107.441864, 100.00000, 84.313728)