首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >图像整形不适用于灰色图像的枕头?

图像整形不适用于灰色图像的枕头?
EN

Stack Overflow用户
提问于 2020-04-16 09:56:54
回答 3查看 889关注 0票数 0

我正在使用下面的代码来重塑我的形象。它适用于RGB图像。但是,它不适用于灰度图像。

代码语言:javascript
运行
复制
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)

代码语言:javascript
运行
复制
 <PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=714x714 at 0x7F95DB4D4BA8>

非工作像print(image)

代码语言:javascript
运行
复制
 <PIL.JpegImagePlugin.JpegImageFile image mode=L size=714x714 at 0x7F32B5430BA8>

  1. 如何解决这个问题?
  2. 是因为模式的改变吗?

任何帮助都是值得感激的。

错误:

代码语言:javascript
运行
复制
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)
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-04-16 10:34:21

你不需要做任何整形。如果要在Numpy数组中显示3通道图像,只需执行以下操作:

代码语言:javascript
运行
复制
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对调色板图像的回答也很有帮助。

票数 1
EN

Stack Overflow用户

发布于 2020-04-16 10:01:21

该函数不能在灰度图像上工作,您需要编辑(IM_HEIGHT, IM_WIDTH, 1)上一个维度上的频道数。这是因为您不再使用RGB颜色通道了。

试试这个:

代码语言:javascript
运行
复制
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)
票数 1
EN

Stack Overflow用户

发布于 2020-04-16 11:22:59

另一个简单的想法是在通道尺寸(即轴2)上将灰度图像连在一起三次,如果传入的图像具有长度为2的形状元组(如您的情况):

代码语言:javascript
运行
复制
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)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61247453

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档