我是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()
非常感谢您的帮助。
答案 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]
这将产生灰度图像,但是您需要知道新的尺寸