【发布时间】:2016-12-20 16:31:12
【问题描述】:
我正在实现一个分形火焰渲染器,用于踢球和咯咯笑,但被一个愚蠢的小颜色问题所困扰。运行算法后,我得到一个 RGBA 矩阵(HxWxC,特别是我有 1080x1440x4),但是使用 pyplot 渲染它时得到的结果与使用 scipy 渲染时得到的结果不同。这是输出代码:
condensed = prepare_image(condensed, **condensed_args)
condensed[np.isnan(condensed)] = 0
name += '.png' if not name.endswith('.png') else ''
sc.misc.imsave("sc_" + name, condensed, format='png')
plt.imsave("pl_" + name, condensed)
这是两个输出图像:
Scipy:
Pyplot:
忽略背景颜色(alpha 为 0,所以我可以手动处理),颜色的细节完全不同:scipy 产生平滑的青色,而 pyplot 产生随机的静态大杂烩颜色。如果我用 pyplot.imread 重新加载 scipy 的图像并显示它,我会得到漂亮的青色,所以 pyplot 如何解释我的原始 RGBA 矩阵一定有一些东西。我没有在我能看到的任何其他地方设置任何颜色图或索引。两个 imsave 函数的文档似乎都说它们的行为方式相同(并且 pyplot 的 imshow 行为与其 imsave 相同,正如预期的那样)。
如果我不得不猜测,看起来 pyplot 将我的数据解释为 HSL 或其他颜色空间。 Scipy 更接近我的预期,以及算法应该产生的结果。
有人看到我在这里做错了吗?非常感谢您的帮助。
【问题讨论】:
标签: python numpy matplotlib colors scipy