Matplotlib का उपयोग करके चित्र को स्केल के रूप में प्रदर्शित करें


231

मैं matplotlib.pyplot.imshow () का उपयोग करके एक ग्रेस्केल छवि प्रदर्शित करने का प्रयास कर रहा हूं । मेरी समस्या यह है कि ग्रेस्केल छवि को एक कॉलॉर्मप के रूप में प्रदर्शित किया जाता है। मुझे ग्रेस्केल की आवश्यकता है क्योंकि मैं रंग के साथ छवि के शीर्ष पर आकर्षित करना चाहता हूं।

मैं छवि में पढ़ता हूं और पीआईएल की छवि का उपयोग कर ग्रेस्केल में परिवर्तित करता हूं। ()। कन्वर्ट ("एल")।

image = Image.open(file).convert("L")

फिर मैं छवि को एक मैट्रिक्स में परिवर्तित करता हूं ताकि मैं आसानी से कुछ इमेज प्रोसेसिंग का उपयोग कर सकूं

matrix = scipy.misc.fromimage(image, 0)

हालांकि, जब मैं करता हूं

figure()  
matplotlib.pyplot.imshow(matrix)  
show()

यह एक colormap (यानी यह ग्रेस्केल नहीं है) का उपयोग करके छवि प्रदर्शित करता है।

मुझसे यहां क्या गलत हो रहा है?

जवाबों:


368

निम्न कोड एक फ़ाइल से एक छवि लोड करेगा image.pngऔर इसे ग्रेस्केल के रूप में प्रदर्शित करेगा।

import numpy as np
import matplotlib.pyplot as plt
from PIL import Image

fname = 'image.png'
image = Image.open(fname).convert("L")
arr = np.asarray(image)
plt.imshow(arr, cmap='gray', vmin=0, vmax=255)
plt.show()

यदि आप उलटा ग्रेस्केल प्रदर्शित करना चाहते हैं, तो cmap को स्विच करें cmap='gray_r'


4
@ संजय: इस डॉक्टर स्ट्रिंग के अनुसार , "ध्यान दें कि यहां सूचीबद्ध किसी भी कॉलॉर्मैप को जोड़कर उलटा किया जा सकता है _r।"
अनटुब

31
चेतावनी matplotlib पिक्सेल पैमाने की तीव्रता को समायोजित करें यदि आप उपयोग नहीं करना चाहते हैं:plt.imshow(im_gray,cmap='gray', vmin = 0, vmax = 255)
themadmax


17

import matplotlib.pyplot as plt

आप अपने कोड में एक बार भी चला सकते हैं

plt.gray()

यह डिफ़ॉल्ट रूप में स्केल में चित्र दिखाएगा

im = array(Image.open('I_am_batman.jpg').convert('L'))
plt.imshow(im)
plt.show()

आप किस पुस्तकालय के लिए उपयोग कर रहे हैं gray()या grey()?
शेरलहोमन

@ शेरिलोहमन, यह है gray... ग्रे मानक अमेरिकी वर्तनी है और ग्रे एक ही रंग के लिए ब्रिटिश वर्तनी है।
क्लाउड चो

12

मैं get_cmap विधि का उपयोग करूंगा। पूर्व .:

import matplotlib.pyplot as plt

plt.imshow(matrix, cmap=plt.get_cmap('gray'))

11

@ अनटुब का जवाब सही उत्तर के काफी करीब है।

डिफ़ॉल्ट रूप से, plt.imshow () आपके (MxN) एरे डेटा को 0.0 ~ 1.0 स्केल करने की कोशिश करेगा। और फिर 0 ~ 255 पर मैप करें। अधिकांश प्राकृतिक ली गई छवियों के लिए, यह ठीक है, आप एक अलग नहीं देखेंगे। लेकिन अगर आपके पास पिक्सेल मान छवि की संकीर्ण सीमा है, तो मान लीजिए कि पिक्सेल 156 है और अधिकतम पिक्सेल 234 है। ग्रे छवि पूरी तरह से गलत दिखेगी। ग्रे में एक छवि दिखाने का सही तरीका है

from matplotlib.colors import NoNorm
...
plt.imshow(img,cmap='gray',norm=NoNorm())
...

आइए एक उदाहरण देखें:

यह मूल छवि है: मूल

यह डिफॉल मानदंड सेटिंग का उपयोग कर रहा है, जो कि कोई भी नहीं है: गलत चित्र

यह NoNorm सेटिंग का उपयोग कर रहा है, जो NoNorm (): सही तस्वीर है


9

इसे इस्तेमाल करे:

import pylab
from scipy import misc

pylab.imshow(misc.lena(),cmap=pylab.gray())
pylab.show()

वहाँ नहीं है pylab.grey(), शायद इसे हटा दिया गया है?
लंडन व्हाइट

4

कोई प्रक्षेप न करें और ग्रे पर सेट करें।

import matplotlib.pyplot as plt
plt.imshow(img[:,:,1], cmap='gray',interpolation='none')
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.