python - 为什么在 255 倍时图片会变成紫色?
问题描述
首先我将 RGB 图像缩放到 [0,1],然后在 matplotlib 中显示就可以了。
然后我恢复它(乘以 255)并显示它,但它变成了紫色,如下面的图片所示。
是什么原因?如何解决?将图像重新缩放到 [0,255] 的正确方法是什么?
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
dog = mpimg.imread('1.jpg')
dog = dog / 255
plt.subplot(121)
plt.imshow(dog) #Normal and ok here
plt.title(('/255'))
dog = dog*255
plt.subplot(122)
plt.imshow(dog) # Purple image, not ok
plt.title('*255')
plt.savefig('out.jpg')
plt.show()
=============================这里有一行================== ========
由@BruceWayne 建议,我尝试使用 *-255 而不是 *255,它可以工作。
但原因是什么?为什么值在 [-255, 0] 的图片会显示正常,而 [0,255] 的图片会以不同的方式显示?
解决方案
当我尝试您的程序时,我收到一条警告,提示“使用 RGB 数据将输入数据剪切到 imshow 的有效范围(浮点数为 [0..1] 或整数为 [0..255])。”
首次加载图像时,它由 0..255 范围内的整数组成,imshow 正常显示。当您将其除以 255 时,它会变成 [0..1] 范围内的浮点数,imshow 再次正常显示。
然后你乘以 255,把它变成 [0..255] 范围内的浮点数,这个 imshow 不知道该怎么办!
我尝试使用将其改回整数
import numpy as np
dog = (dog * 255).astype(np.uint8)
(可能有更好的方法)然后它再次正常显示。
推荐阅读
- javascript - 每 5 秒自动运行一次函数(Angular)
- serial-port - Linux 上的直接耳机插孔 I/O
- arrays - 加快字符替换 VBA
- angular - 我如何更改来自后端 Angular REST API 的格式?
- python - 带有 docker 的 Jupyter:__init__() 得到了一个意外的关键字参数“列”
- python - 使用不存在列名的 Pandas 数据框进行列名操作
- python - 无效参数:目标转换序列的时间不足
- php - Composer 说我的 PHP 太旧了,但不是吗?
- mysql - 如何从 Azure SQL 服务器/数据库连接到远程 MySQL
- java - java中的位运算符