【问题标题】:Matplotlib imsave image with log normMatplotlib imsave 图像与日志规范
【发布时间】:2017-07-12 09:48:54
【问题描述】:

如何使用 Matplotlib 使用以下颜色图选项保存图像?

当前的语法不允许我这样做?

plt.imsave('C:/Users/Desktop/Img/image'+'_'+ str(i)+'.png', data)

我想在上面添加这个:

norm=matplotlib.colors.LogNorm()
cmap=my_cmap

理想情况下我希望:

plt.imsave('C:/Users/Desktop/Img/image'+'_'+ str(i)+'.png', data, norm=matplotlib.colors.LogNorm(), cmap=my_cmap)

但这不可能。

matplotlib.image.imsave(fname, arr, vmin=None, vmax=None, cmap=None, format=None, origin=None, dpi=100)的文档

【问题讨论】:

  • 你得到什么错误?
  • TypeError: imsave() 得到了一个意外的关键字参数“规范”。我想添加规范,因为它可以在 imshow() 中使用,但不能在 imsave() 中使用

标签: python matplotlib logarithm colormap


【解决方案1】:

本质上使用 LogNorm 与取数据的对数相同。

import matplotlib.pyplot as plt
import numpy as np

data = plt.imread("house.png").mean(axis=2)
logdata = np.log(data)
plt.imsave("logimage.png", logdata, cmap="viridis")

如果某些值为零,则对数图的外观可能并不明显。您可以预先用 nan 值替换零(这就是 LogNorm 会做的)

data[data == 0.] = np.nan
logdata = np.log(data)

或者你可以在数据中添加少量,这样它们就不再是零了

logdata = np.log(data+0.02)

【讨论】:

  • 谢谢,但我确实做了你的代码,我遇到了这个“错误:运行时警告:在日志中遇到除以零”有解决方法吗?
  • 这不是错误,而是警告,可以忽略。问题是,如何在对数图中处理零值?我用两个选项更新了答案。
猜你喜欢
  • 2012-08-30
  • 1970-01-01
  • 2018-08-18
  • 1970-01-01
  • 2018-09-21
  • 2018-02-15
  • 1970-01-01
  • 2013-09-03
  • 1970-01-01
相关资源
最近更新 更多