matplotlib的imshow函数非常复杂,支持很多的colormap,变换等等。使用该函数需要注意参数的设置,尤其是灰度图像。
imshow有2个参数vmin和vmax。在显示灰度图像时,要设定上vmin=0以及vmax=255。否则imshow函数会自动进行数值调整。
输入的数值分别是:X1 = [[1,2,3],[4,5,6]]和X2 = [[111,112,113],[114,115,116]]。如果不设置vmin和vmax则得到的图像是差不多的。
#coding:utf8 import matplotlib.pyplot as plt X1 = [[1,2,3],[4,5,6]] X2 = [[111,112,113],[114,115,116]] fig = plt.figure() ax = fig.add_subplot(121) im = ax.imshow(X1,cmap=plt.cm.gray) plt.colorbar(im, cax=None, ax=None,shrink=0.5) ax = fig.add_subplot(122) im = ax.imshow(X2, cmap=plt.cm.gray) plt.colorbar(im, cax=None, ax=None,shrink=0.5) plt.show()
假如设置vmin=0,vmax=255,情况就会不一样:
第3张和第4张图的灰度值设置是[0,255],此时X1和X2因为数值接近,显示为接近纯色而不是灰度差别很大的色块。因此在使用matplotlib的imshow函数时候要注意此种情况,否则很可能得不到想要的结果,比如进行灰度缩放的时候很可能没有显著的变化。
# coding:utf8 import matplotlib.pyplot as plt X1 = [[1, 2, 3], [4, 5, 6]] X2 = [[111, 112, 113], [114, 115, 116]] fig = plt.figure() ax = fig.add_subplot(221) im = ax.imshow(X1, cmap=plt.cm.gray) plt.colorbar(im, cax=None, ax=None, shrink=0.5) ax = fig.add_subplot(222) im = ax.imshow(X2, cmap=plt.cm.gray) plt.colorbar(im, cax=None, ax=None, shrink=0.5) ax = fig.add_subplot(223) im = ax.imshow(X1, cmap=plt.cm.gray, vmin=0, vmax=255) plt.colorbar(im, cax=None, ax=None, shrink=0.5) ax = fig.add_subplot(224) im = ax.imshow(X2, cmap=plt.cm.gray, vmin=0, vmax=255) plt.colorbar(im, cax=None, ax=None, shrink=0.5) plt.show()



