我编写了这段代码来切换给定图像中RGB阵列中的红色和蓝色值:
from __future__ import division
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
import colorsys
image = Image.open("image.jpg")
RGBarr = np.asarray(image)
newRGB = np.full_like(RGBarr, 1)
red = RGBarr[..., 0]
green = RGBarr[...,1]
blue = RGBarr[..., 2]
newRGB[..., 0] = blue
newRGB[..., 1] = green
newRGB[..., 2] = red
inv_image = Image.fromarray(newRGB, 'RGB')
inv_image.save('inv_image.png')
inv_image.show()
我尝试了多幅图像,几乎每次都可以使用。但是,在某些情况下,它会给我下一个错误:
raise ValueError("not enough image data")
ValueError: not enough image data
如果我未在Image.fromarray(obj,mode)中指定模式,则可以修复,但是即使这样做,我也不确定所获得的结果是否为“正确”的结果。是否有确定特定图像应使用哪种模式的方法?
我希望这不是一个愚蠢的问题,但是在这个图像处理行业中我是新来的
image = Image.open("image.jpg").convert('RGB')
然后,可能的灰度图像将转换为RGB,并且可以作为常规RGB图像进行处理。切换红色和蓝色通道不会对这里造成危害,因为从灰色到彩色的转换,两个通道的信息都是相同的。]你发现自己,
inv_image = Image.fromarray(newRGB)
也可以,但是其余代码的处理现在不再正确(对所需的尺寸/轴进行适当的切片)。这将需要在代码上做进一步的工作,以尊重灰度图像。希望有帮助!