我正在从一个数组中创建一个图像,而 matplotlib 只能在内核崩溃之前给出一个特定的“dpi”(例如,对于 dpi=8000 绘图,内核会立即死亡)。因此我决定用 PIL 制作图像 - 但它完全搞砸了。
我创建了一个 MCVE:
a = np.zeros([5,5])
a[:,2] = 255
a = np.repeat(a[...,np.newaxis], 3, axis=2)
如果我们通过把这个matplotlib
用
img = plt.imshow(a)
plt.show()
但是如果我们使用类似的 PIL 代码
img = Image.fromarray(a, "RGB")
img.save("Stuff.png")
我们得到这个图像:
(此处的图像已截屏并放大,因为它实际上只有 5x5 像素)
为什么是这样?!这只是一个错误吗?!
编辑:这个问题现在已经解决了,多亏了这个和上一个问题,我的计算速度更快,更像 pythonic。感谢 SO,这里是 Mandelbrot Set 的 400 兆像素图像的屏幕截图,该图像基于 C 的象限着色,Z 点在它逃逸时结束,现在可以在 2 分钟内计算出来:
您使用 64 位浮点值作为输入,因为这是np.zeros()
. fromarray()
的“RGB”模式需要 3 x 8 位像素。
尝试:
img = Image.fromarray(a.astype(np.uint8), "RGB")
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句