2012-10-06 24 views
12

Tôi đang chuyển từ MatLab sang python và phát xung quanh bằng hàm imshow.imshow (img, cmap = cm.gray) hiển thị màu trắng cho 128 giá trị

Tôi dường như không thể hiểu được lý do tại sao nó không hiển thị giá trị 128 là màu xám với tôi đã chọn cmap có thang màu xám.

Code example

Dường như nó sử dụng màu xám cho cao nhất (128) và các giá trị thấp nhất .. Tôi muốn nó sử dụng màu xám cho [0: 255]. Làm thế nào để làm điều đó?

Trả lời

23

Sử dụng vminvmax thông số:

plt.imshow(bg, cmap=plt.get_cmap('gray'), vmin=0, vmax=255) 

Nếu không có quy định cụ thể vminvmax, plt.imshow tự động điều chỉnh phạm vi của nó đến min và max của dữ liệu.


Tôi không biết một cách để thiết lập mặc định vminvmax thông số cho tất cả các thửa imshow, nhưng bạn có thể sử dụng functools.partial để chuẩn bị một lệnh imshow giống như tùy chỉnh với các thông số mặc định:

import matplotlib.pyplot as plt 
import numpy as np 
import functools 

bwimshow = functools.partial(plt.imshow, vmin=0, vmax=255, 
          cmap=plt.get_cmap('gray')) 

dots = np.random.randn(10, 10)*255 
bwimshow(dots) 
cbar = plt.colorbar() 

plt.show() 
+0

Cảm ơn nhiều! :-) - có cách nào để đặt làm giá trị mặc định cho tất cả các ô không? – Norfeldt

+2

Có, sử dụng 'functools.partial'. Xem ở trên. – unutbu

Các vấn đề liên quan