现在我有了一组数据,我可以把它们转换成独立的R,G,B波段数组,现在我需要把它们组合成一个RGB图像。
我尝试“图像”来做这项工作,但它需要“模式”的属性。
我试着做了一个小把戏。我会使用Image.fromarray()来获取数组到图像,但是当Image.merge需要“L”模式图像来合并时,它默认为“F”模式。如果我首先将fromarray()中的数组属性声明为“L”,所有的R G B图像都会失真。
但是,如果我保存图像,然后打开它们,然后合并,它工作得很好。Image用“L”模式读取图像。
现在我有两个问题。
首先,我认为这不是一种优雅的工作方式,所以如果有人知道更好的工作方式,请告诉我
第二,Image.保存无法正常工作。以下是我遇到的错误:
In [7]: Image.SAVE(imagefile, 'JPEG')
----------------------------------------------------------------------------------
TypeError Traceback (most recent call last)
/media/New Volume/Documents/My own works/ISAC/SAMPLES/<ipython console> in <module>()
TypeError: 'dict' object is not callable
请提出解决办法。
请注意,图像是大约4000x4000大小的阵列。
6条答案
按热度按时间0ve6wy6x1#
也要将浮点数0..1转换为uint8,
g6ll5ycj2#
我真的不明白你的问题,但这里有一个例子,类似的东西,我最近做了,似乎它可能会有所帮助:
mtb9vblg3#
这个代码不会创建三维数组,如果你通过3个通道。2通道保留。
0yg35tkg4#
在将numpy数组传递给
Image.fromarray
之前,将其转换为uint8
例如,如果浮点数在[0..1]范围内:
sz81bmfz5#
你的失真我相信是由你的方式造成的分割成单独的波段,然后重新调整大小,然后再把它合并;
这个很好用!
dsf9zpds6#
如果使用PIL图像,将其转换为数组,然后继续执行以下操作,否则直接使用matplotlib或cv2执行。