मैं एक परियोजना पर काम कर रहा हूं जिसमें एक बिंदु पर मुझे दो छवियों की तुलना करने की आवश्यकता है। कृपया किसी को ऐसा करने के तरीके के साथ मेरी मदद करें .. जिस तरह से छवियां स्क्रीनशॉट हैं सॉफ्टवेयर। मैं यह जांचना चाहता था कि छवियों में प्रदर्शित संख्याओं और अक्षरों (सॉफ़्टवेयर का स्क्रीनशॉट) सहित 0 छवियां हैं।पायथन कोड में चित्रों की तुलना करने के लिए पाइथन कोड
उत्तर
उचित तुलना करने के लिए निम्नलिखित तरीके हैं।
- सबसे पहले, आप रूट मतलब-वर्ग (RMS) के मान की गणना कर सकते हैं रूट-मीन-स्क्वायर अंतर #
कैसे समान दो छवियों के मानदंड हैं प्राप्त करने के लिए है छवियों के बीच अंतर। अगर छवियां बिल्कुल समान हैं, तो यह मान शून्य है। निम्न फ़ंक्शन अंतर फ़ंक्शन का उपयोग करता है, और फिर परिणामी छवि के हिस्टोग्राम से आरएमएस मान की गणना करता है।
# Example: File: imagediff.py
import ImageChops
import math, operator
def rmsdiff(im1, im2):
"Calculate the root-mean-square difference between two images"
h = ImageChops.difference(im1, im2).histogram()
# calculate rms
return math.sqrt(reduce(operator.add,
map(lambda h, i: h*(i**2), h, range(256))
)/(float(im1.size[0]) * im1.size[1]))
- एक और है सटीक तुलना #
निर्धारित करने के लिए तेज तरीका दो छवियों बिल्कुल वैसा ही सामग्री है अगर दो छवियों के बीच अंतर पाने के लिए, और उसके बाद सीमांकन की गणना इस छवि में गैर-शून्य क्षेत्रों का बॉक्स। यदि छवियां समान हैं, तो अंतर छवि में सभी पिक्सेल शून्य हैं, और बाध्यकारी बॉक्स फ़ंक्शन कोई नहीं देता है।
import ImageChops
def equal(im1, im2):
return ImageChops.difference(im1, im2).getbbox() is None
मैं उत्तर का उपयोग करने के लिए तैयार नहीं हूं, लेकिन मैं आपको इंगित करूंगा (I सोचो) सही दिशा। दो छवियों की तुलना करने का एक आसान तरीका उनके द्विआधारी प्रतिनिधित्वों का हैश बनाकर है और फिर देखें कि क्या हैंश समान हैं। इसके साथ एक समस्या हैश फ़ंक्शन के साथ है जिसका उपयोग आप करना चाहते हैं और आपको उस व्यक्ति की तलाश करनी चाहिए जिसमें टकराव की संभावना कम हो, और दूसरी बात यह है कि एक छवि फ़ाइल में मूल बाइनरी जानकारी से मेटाडेटा जुड़ा हुआ है, इसलिए आपको देखना होगा छवियों की तुलना केवल उनकी बाइनरी जानकारी का उपयोग करने के लिए उस मेटाडेटा को कैसे कटौती करें। इसके अलावा, मुझे निश्चित रूप से पता नहीं है लेकिन शायद jpg में एन्कोड की गई छवि का बाइनरी प्रतिनिधित्व पीएनजी में एन्कोड की गई छवि से अलग है, इसलिए आपको इसके बारे में पता होना चाहिए।
मैं दो चित्रों की तुलना करने के लिए Structured Similarity (SSIM) विधि का उपयोग करता है pyssim नामक एक अजगर पुस्तकालय को बनाए रखने कर रहा हूँ।
इसमें पाइथन बाइंडिंग नहीं है, लेकिन perceptualdiff प्रोग्राम दो छवियों की तुलना करने में भी शानदार है - और काफी तेज़।
में प्रदर्शित संख्याओं/अक्षरों सहित समान हैं, क्या Pyssim एक अस्पष्ट तुलना है? क्या होगा अगर किसी छवि में पाठ का एक बक्सा था, तो बॉक्स की स्थिति अन्य छवि के साथ समान होती है, लेकिन पाठ थोड़ा अलग है? यह किस स्कोर पर वापस आएगा? क्या यह केवल संरचनाओं पर विचार करता है? – user299709
यदि पाठ अलग है, तो इसका स्कोर कम होगा। – jterrace
जब आप तुलना करते हैं तो आपका क्या मतलब है? क्या आप देखना चाहते हैं कि वे समान हैं या नहीं? क्या आप पाइथन में ऐसा करने के तरीके या सामान्य रूप से छवियों की तुलना करने के तरीके के बारे में विवरण चाहते हैं? –
हां मैं यह देखने के लिए तुलना करना चाहता था कि क्या वे सॉफ़्टवेयर – stallion