使用matplotlib绘制非uint8图像

时间:2017-03-30 22:29:11

标签: python numpy matplotlib

我在link学习Python Numpy教程的时候,当我试图显示一些图像时matplotlib.pyplot给出了奇怪的结果。

这是我从教程链接修改的示例代码。

from scipy.misc import imread, imresize
import matplotlib.pyplot as plt

img = imread('cat.jpg')
img_tinted = img * [1, 1, 1]

print img_tinted
# Show the original image
plt.subplot(1, 2, 1)
plt.imshow(img)

# Show the tinted image
plt.subplot(1, 2, 2)

plt.imshow(img_tinted)
plt.show()

输出如下

[[[132 128 117]
  [155 151 139]
  [181 175 161]
  ..., 
  [ 78  68  43]
  [ 76  65  43]
  [ 64  53  31]]]

enter image description here

即使数据看起来是 uint8 格式,输出图像也很奇怪。
有没有办法让它与原始图片类似?

1 个答案:

答案 0 :(得分:-1)

一个简单的解决方案是显式地将unit8 强制转换为图像,同时用matplotlib.pyplot

绘制它

只需将此代码plt.imshow(img_tinted)替换为plt.imshow(np.uint8(img_tinted))即可解决问题。

这是示例输出 enter image description here

您甚至可以进一步使用图像

import numpy as np
from scipy.misc import imread, imresize
import matplotlib.pyplot as plt

img = imread('cat.jpg')
img_tinted = img * [1, 0.5, 0.5]

print np.uint8(img_tinted)

# Show the original image
plt.subplot(1, 3, 1)
plt.imshow(img)

# Show the tinted image
plt.subplot(1, 3, 2)
plt.imshow(np.uint8(img_tinted))

# Show the tinted image without using np.uint8
plt.subplot(1, 3, 3)
plt.imshow(img_tinted)

plt.show()

输出如下

 [[[132 128 117]
  [155 151 139]
  [181 175 161]
  ..., 
  [ 78  68  43]
  [ 76  65  43]
  [ 64  53  31]]]

enter image description here