Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
395 views
in Technique[技术] by (71.8m points)

python - imshow(img, cmap=cm.gray) shows a white for 128 value

I'm moving from MatLab to python and playing around with the imshow function.

I can't seem to get my head around why it doesn't show the value 128 as grey with I have chosen the cmap to be gray-scale.

Code example

It seems as it uses the grayscale for highest (128) and lowest values.. I want it to use the grayscale for [0:255]. How do I do that?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

Use the vmin and vmax parameters:

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

Without specifying vmin and vmax, plt.imshow auto-adjusts its range to the min and max of the data.


I do not know of a way to set default vmin and vmax parameters for all imshow plots, but you could use functools.partial to prepare a custom imshow-like command with default parameters set:

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

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...