python - عرض الصورة بتدرج الرمادي باستخدام matplotlib




grayscale (4)

@ الجواب unutbu هو قريب جدا من الإجابة الصحيحة.

بشكل افتراضي ، سيحاول plt.imshow () تحجيم بيانات صفيف (MxN) إلى 0.0 ~ 1.0. ثم قم بتعيين 0 ~ 255. بالنسبة لمعظم الصور الطبيعية ، هذا جيد ، لن ترى اختلافًا. ولكن إذا كان لديك نطاق ضيق من قيمة قيم البكسل ، فلنقل أن الحد الأدنى للبيكسل هو 156 وأن الحد الأقصى للبيكسل هو 234. وستبدو الصورة الرمادية سيئة تمامًا. الطريقة الصحيحة لإظهار صورة باللون الرمادي هي

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

دعونا نرى مثال على ذلك:

هذه هي الصورة original : original

هذا هو استخدام الإعداد المحدد defaul ، وهو بلا: الموافقة المسبقة عن علم الخطأ

هذا باستخدام الإعداد NoNorm وهو NoNorm (): pic الصحيح

أحاول عرض صورة بتدرج الرمادي باستخدام matplotlib.pyplot.imshow () . مشكلتي هي أن الصورة الرمادية يتم عرضها على هيئة colormap. أحتاج إلى تدرج الرمادي لأنني أرغب في الرسم على الصورة بالألوان.

قرأت في الصورة وتحويلها إلى تدرج الرمادي باستخدام PIL's Image.open (). تحويل ("L")

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

ثم أقوم بتحويل الصورة إلى مصفوفة حتى أتمكن من القيام ببعض عمليات معالجة الصور بسهولة

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

ومع ذلك ، عندما أفعل

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

فإنه يعرض الصورة باستخدام colormap (أي أنها ليست رمادية).

ماذا أفعل الخطأ هنا؟


أود استخدام أسلوب get_cmap. مثال:

import matplotlib.pyplot as plt

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

سيحمل التعليمة البرمجية التالية صورة من ملف صورة. 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')
plt.show()

إذا كنت تريد عرض تدرج الرمادي المعكوس ، cmap='gray_r' بتشغيل cmap إلى cmap='gray_r' .








grayscale