将图像转换为数组时,反之亦然,必须要考虑一些额外的因素吗?

问题描述 投票:0回答:1

我编写了这段代码来切换给定图像中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)中指定模式,则可以修复,但是即使这样做,我也不确定所获得的结果是否为“正确”的结果。是否有确定特定图像应使用哪种模式的方法?

我希望这不是一个愚蠢的问题,但是在这个图像处理行业中我是新来的

python python-imaging-library rgb
1个回答
0
投票
发生错误,当您尝试读取灰度图像时,即图像中仅存在一个通道。要保持其余代码有效,最简单的方法是使用以下方法来强制执行RGB输入:

image = Image.open("image.jpg").convert('RGB')

然后,可能的灰度图像将转换为RGB,并且可以作为常规RGB图像进行处理。切换红色和蓝色通道不会对这里造成危害,因为从灰色到彩色的转换,两个通道的信息都是相同的。]

你发现自己,

inv_image = Image.fromarray(newRGB)

也可以,但是其余代码的处理现在不再正确(对所需的尺寸/轴进行适当的切片)。这将需要在代码上做进一步的工作,以尊重灰度图像。

希望有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.