我正在使用下面的代码来重塑我的形象。它适用于RGB图像。但是,它不适用于灰度图像。
from PIL import Image
import numpy as np
def load_image_into_numpy_array(image):
(im_width, im_height) = image.size
return np.array(image).reshape((im_height, im_width, 3)).astype(np.uint8)
image_path="color.jpg"
image = Image.open(image_path)
image_np = load_image_into_numpy_array(image)
image.close()
这是工作图像color.jpg
这不是工作图像grey.jpg
两种图像形状都是相同的。
image.size
(714,714)
当我打印图像时,我发现了一个不同的地方。
工作图像print(image)
<PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=714x714 at 0x7F95DB4D4BA8>
非工作像print(image)
<PIL.JpegImagePlugin.JpegImageFile image mode=L size=714x714 at 0x7F32B5430BA8>
任何帮助都是值得感激的。
错误:
Traceback (most recent call last):
File "checker.py", line 11, in <module>
image_np = load_image_into_numpy_array(image)
File "checker.py", line 5, in load_image_into_numpy_array
return np.array(image).reshape((im_height, im_width, 3)).astype(np.uint8)
ValueError: cannot reshape array of size 509796 into shape (714,714,3)
发布于 2020-04-16 10:34:21
你不需要做任何整形。如果要在Numpy数组中显示3通道图像,只需执行以下操作:
import numpy as np
from PIL import Image
# Open image as PIL Image and ensure 3-channel RGB
im = Image.open('input.jpg').convert('RGB')
# Make into Numpy array
na = np.array(im)
您可能会发现this对调色板图像的回答也很有帮助。
发布于 2020-04-16 10:01:21
该函数不能在灰度图像上工作,您需要编辑(IM_HEIGHT, IM_WIDTH, 1)
上一个维度上的频道数。这是因为您不再使用RGB颜色通道了。
试试这个:
def load_image_into_numpy_array(image):
(im_width, im_height) = image.size
return np.array(image).reshape((im_height, im_width, 1)).astype(np.uint8)
发布于 2020-04-16 11:22:59
另一个简单的想法是在通道尺寸(即轴2)上将灰度图像连在一起三次,如果传入的图像具有长度为2的形状元组(如您的情况):
def load_image_into_numpy_array(image):
if len(image.shape) == 2:
image = image[:, :, np.newaxis]
image = np.concatenate([image]*3, axis=2)
return np.array(image).astype(np.uint8)
https://stackoverflow.com/questions/61247453
复制相似问题