裁剪后的图片比裁剪后的图片有更多尺寸(python,numpy)

时间:2019-08-04 14:16:56

标签: python numpy image-processing

我是python的新手,目前正在使用枕头和numpy为Word Cloud创建蒙版。

我在原始图像和裁剪后的版本之间遇到了一个问题(在MS Paint中进行了裁剪,在该操作中我还反转了颜色)。当我运行以下代码时:

mask = Image.open("C:/Users/d-j-h/downloads/original.png")
mask = np.array(mask)

mask2 = Image.open("C:/Users/d-j-h/downloads/cropped.png")
mask2 = np.array(mask2)  

原始蒙版将按预期显示(键入uint8,大小(137,361),如果我查看数组,则可以得出原始图像),而裁剪后的图像具有附加尺寸(键入uint8,大小(70,294, 3),看起来完全不像图像,并且当我尝试使用以下代码进行一些转换(将图像中的0实例转换为255)

def transform_format(val):
if val == 0:
    return 255
else:
    return val

transformed_mask = np.ndarray((mask.shape[0],mask.shape[1]), np.int32)

for i in range(len(mask)):
    transformed_mask[i] = list(map(transform_format, mask[i])) 

它完美地适用于mask(原始图像),但不适用于mask2,即使我更改了代码(mask> mask2)并向np.ndarray添加了额外的尺寸。我收到以下错误消息:

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

非常感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

通常,默认情况下某些图像可以灰度读取。但是,裁剪后的图像显示为RGB(3通道)。

为什么它看起来与原始版本不一样?这取决于。 也许,您应该上传图像来回答这个问题。

作为解决方案,您可以在阅读原始图像并转换为numpy后进行裁剪,以获取所需的内容:

mask = Image.open("C:/Users/d-j-h/downloads/original.png")
mask = np.array(mask)

mask2 = mask[new_rows_start:rows_end, new_cols_start:cols_end]

这将产生灰度图像,但是您需要知道新的尺寸