แสดงภาพเป็นโทนสีเทาโดยใช้ matplotlib


231

ฉันพยายามที่จะแสดงภาพระดับสีเทาโดยใช้matplotlib.pyplot.imshow () ปัญหาของฉันคือภาพสีเทาจะแสดงเป็นตารางสี ฉันต้องการสีเทาเพราะฉันต้องการวาดที่ด้านบนของภาพด้วยสี

ฉันอ่านรูปภาพและแปลงเป็นสีเทาโดยใช้Image.open ของ PIL (). convert ("L")

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
@jay: ต่อสตริงเอกสารนี้ "โปรดทราบว่าตารางต่อไปนี้ที่แสดงรายการที่นี่สามารถย้อนกลับได้โดยต่อท้าย_r"
unutbu

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()?
SherylHohman

@SherylHohman มันคือgray... สีเทาคือการสะกดแบบอเมริกันมาตรฐานและสีเทาเป็นตัวสะกดอังกฤษสำหรับสีเดียวกัน
Cloud Cho


11

คำตอบของ @ unutbu ค่อนข้างใกล้กับคำตอบที่ถูกต้อง

โดยค่าเริ่มต้น plt.imshow () จะพยายามปรับขนาดข้อมูลอาร์เรย์ (MxN) เป็น 0.0 ~ 1.0 จากนั้นแผนที่ถึง 0 ~ 255 สำหรับภาพที่ถ่ายที่เป็นธรรมชาติที่สุดแล้วคุณจะไม่เห็นความแตกต่าง แต่ถ้าคุณมีภาพค่าพิกเซลแคบ ๆ ให้บอกว่าพิกเซลต่ำสุดคือ 156 และพิกเซลสูงสุดคือ 234 ภาพสีเทาจะดูผิดทั้งหมด วิธีที่ถูกต้องในการแสดงภาพเป็นสีเทาคือ

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

ลองดูตัวอย่าง:

นี่คือภาพต้นฉบับ : ดั้งเดิม

นี่คือการใช้การตั้งค่าบรรทัดฐาน defaul ซึ่งก็คือไม่มี: รูปผิด

นี่ใช้การตั้งค่า NoNorm ซึ่งก็คือ NoNorm (): รูปที่ถูกต้อง



4

ไม่มีการแก้ไขและตั้งค่าเป็นสีเทา

import matplotlib.pyplot as plt
plt.imshow(img[:,:,1], cmap='gray',interpolation='none')
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.