【发布时间】:2019-11-15 08:01:14
【问题描述】:
我编写了这段代码来切换给定图像的 RGB 数组中的红色和蓝色值:
from PIL import Image
import numpy as np
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) 中指定模式,这可以解决,但即使这样做我也不确定我获得的结果是否是“正确”的。
有没有办法确定某个图像应该使用什么模式?
我希望这不是一个愚蠢的问题,但我是这个图像处理行业的新手。
【问题讨论】:
-
总是将完整的错误消息(从单词“Traceback”开始)作为文本(不是屏幕截图)放在有问题的(不是评论)中。还有其他有用的信息。
-
顺便说一句:OpenCV 具有将 BGR 转换为 RGB 的功能 -
image = cv.cvtColor(image, cv.COLOR_BGR2RGB) -
也许您没有
RGB,而是grayscale或RGBA。你应该检查它的形状 -print(RGBarr.shape) -
顺便说一句:PIL 具有拆分通道(波段)并将它们加入图像的功能 - 所以你不需要
numpy-r,g,b = image.split()image = Image.merge('RGB', [b,g,r]) -
BTW:检查模式
print(image.mode)- 给出RGB、RGBA或L(用于灰度)
标签: python colors python-imaging-library rgb