gpt4 book ai didi

python-2.7 - 将来自 plt.imsave 的两个图像与不同的 cmap 连接起来,而无需安装另一个包

转载 作者:行者123 更新时间:2023-12-02 00:59:34 25 4
gpt4 key购买 nike

我通过保存一系列图像制作电影,然后使用 ImageJ将它们放在一起,如下所示:

for i in range(n):
fname = 'out_' + str(1000+i)
plt.imsave(fname, A[i], cmap=cmapA)

我想以某种方式“连接”两个图像(例如,它们并排显示)并保存,使用不同的颜色图生成。所以假设:

for i in range(n):
fname = 'out_' + str(1000+i)
plt.hypothetical_imsave(fname, (A[i], B[i]), cmap=(cmapA, cmapB), axis=1)

当然,这是伪代码,但是有没有什么方法可以在不安装全新软件包的情况下使用旧的 numpy 和 matplotlib 来做到这一点?

最佳答案

不是像我上面的回答那样创建两个临时图像,另一种方法是使用 imshow 制作两个数组,如下例所示。

我们将使用 ._rgbacacheimshow 对象中获取 numpy 数组,但要生成它,您必须在上显示 imshow 对象一个轴,因此开头是 figax

import numpy as np
import matplotlib.pyplot as plt

# Need to display the result of imshow on an axis
fig=plt.figure()
ax=fig.add_subplot(111)

# Save fig a with one cmap
a=np.random.rand(20,20)
figa=ax.imshow(a,cmap='jet')

# Save fig b with a different cmap
b=np.random.rand(20,20)
figb=ax.imshow(a,cmap='copper')

# Have to show the figure to generate the rgbacache
fig.show()

# Get the array of data
figa=figa._rgbacache
figb=figb._rgbacache

# Stitch the two arrays together
figc=np.concatenate((figa,figb),axis=1)

# Save without a cmap, to preserve the ones you saved earlier
plt.imsave('figc.png',figc,cmap=None)

编辑:

要使用 imsave 和类似文件的对象执行此操作,您需要 cStringIO:

import numpy as np
import matplotlib.pyplot as plt
from cStringIO import StringIO

s=StringIO()
t=StringIO()

# Save fig a with one cmap to a StringIO instance. Need to explicitly define format
a=np.random.rand(20,20)
plt.imsave(s,a,cmap='jet',format='png')

# Save fig b with a different cmap
b=np.random.rand(20,20)
plt.imsave(t,b,cmap='copper',format='png')

# Return to beginning of string buffer
s.seek(0)
t.seek(0)

# Get the array of data
figa=plt.imread(s)
figb=plt.imread(t)

# Stitch the two arrays together
figc=np.concatenate((figa,figb),axis=1)

# Save without a cmap, to preserve the ones you saved earlier
plt.imsave('figc.png',figc,cmap=None)

关于python-2.7 - 将来自 plt.imsave 的两个图像与不同的 cmap 连接起来,而无需安装另一个包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30343533/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com