我在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]]]
即使数据看起来是 uint8 格式,输出图像也很奇怪。
有没有办法让它与原始图片类似?
答案 0 :(得分:-1)
一个简单的解决方案是显式地将unit8 强制转换为图像,同时用matplotlib.pyplot
绘制它只需将此代码plt.imshow(img_tinted)
替换为plt.imshow(np.uint8(img_tinted))
即可解决问题。
您甚至可以进一步使用图像
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]]]