मैंने एक छवि के भीतर एक रंग खोजने के लिए एक फ़ंक्शन बनाया है, और x, y वापस कर दिया है। अब मुझे एक नया फ़ंक्शन जोड़ने की ज़रूरत है, जहां मुझे दिए गए टोलरेंस के साथ रंग मिल सकता है। आसान होना चाहिए?पायथन - समान रंग खोजें, सर्वोत्तम तरीका
कोड छवि में रंग मिल जाए, और वापसी एक्स के लिए, वाई:
def FindColorIn(r,g,b, xmin, xmax, ymin, ymax):
image = ImageGrab.grab()
for x in range(xmin, xmax):
for y in range(ymin,ymax):
px = image.getpixel((x, y))
if px[0] == r and px[1] == g and px[2] == b:
return x, y
def FindColor(r,g,b):
image = ImageGrab.grab()
size = image.size
pos = FindColorIn(r,g,b, 1, size[0], 1, size[1])
return pos
परिणाम:
जवाब दो रंगों की तुलना में सामान्य तरीके इयूक्लिडियन दूरी में हैं से लिया , या चेबिशहेव दूरी।
मैंने अधिकतर (वर्ग) यूक्लिडियन दूरी, और कई अलग-अलग रंग-रिक्त स्थान का उपयोग करने का निर्णय लिया। एलएबी, डेल्टाई (एलसीएच), एक्सवाईजेड, एचएसएल, और आरजीबी। मेरे कोड में, अधिकांश रंग-रिक्त स्थान अंतर की गणना करने के लिए स्क्वायर यूक्लिडियन दूरी का उपयोग करते हैं।
उदाहरण के लिए एलएबी, आरजीबी और एक्सवाईजेड के साथ एक साधारण वर्ग ईक। दूरी काम कर देता है:
if ((X-X1)^2 + (Y-Y1)^2 + (Z-Z1)^2) <= (Tol^2) then
...
एलसीएच, और के रूप में दोनों एक बेलनाकार रंग है एचएसएल एक छोटे से अधिक जटिल है, लेकिन गणित के कुछ टुकड़े को हल करती है कि, तो यह वर्ग eucl का उपयोग करने पर है। यहाँ भी।
इन मामलों में मैंने प्रत्येक चैनल के लिए सहिष्णुता के लिए "अलग पैरामीटर" जोड़ा है (1 वैश्विक सहिष्णुता और वैकल्पिक "संशोधक" HueTol := Tolerance * hueMod
या LightTol := Tolerance * LightMod
का उपयोग करके)।
ऐसा लगता है जैसे एक्सवाईजेड (एलएबी, एलसीएच) के शीर्ष पर बने रंगस्थान मेरे कई परिदृश्यों में सर्वश्रेष्ठ प्रदर्शन करते हैं। कुछ मामलों में एचएसएल बहुत अच्छे नतीजे पैदा करता है, और आरजीबी से कनवर्ट करना बहुत सस्ता है, आरजीबी भी बहुत अच्छा है, और मेरी अधिकांश जरूरतों को भरता है।
यदि आपको छवि में रंग नहीं मिलता है तो आपको कुछ वापस करना चाहिए। यानी, एक त्रुटि कोड। –
आप सहिष्णुता को कैसे परिभाषित कर रहे हैं? 'R',' g' और 'b' के लिए अलग-अलग श्रेणियां? –
मैं जॉन के साथ हूं: आपने पहले से क्या प्रयास किया है? आप [कोसाइन समानता] (https://en.wikipedia.org/wiki/Cosine_similarity) देख सकते हैं और पाइथन कार्यान्वयन की खोज कर सकते हैं। –