gpt4 book ai didi

python - 奇怪的 PIL.Image.fromarray 行为,numpy 零和模式为 ='1'

转载 作者:行者123 更新时间:2023-12-04 00:22:17 46 4
gpt4 key购买 nike

对我来说应该有一些谜题。

根据 PIL 文档,它具有不同的图像模式(如 1、L、8、RGB、RGBA 等),但我对模式“1”感兴趣(1 位像素,黑白,存储在每个字节一个像素)。

我创建了 2 个大小为 100 x 100 的矩阵:第一个只有零 (np.zeros),第二个只有一个 (np.ones),期望全黑图像带有 1,而白色图像带有模式 '1' 中的零仅黑白图像。

结果图片

问题:我做错了什么?

UPD。我试过使用 np.dtype uint8,没有用: enter image description here

最终可接受的 UPD:似乎有一个 PIL 错误,有一段时间没有修复,所以您应该使用变通方法以这种方式创建一个白色矩形。奇怪,但现在我什至不确定模式“1”是什么意思:D enter image description here

最佳答案

关于原始问题,这是最短的版本,对我有用:

Image.fromarray(255 * np.ones((100, 100), np.uint8), '1')

我得到了正确的全白图像。

As pointed out earlier , 转换为模式“1”时,dithering默认激活。所以,模式“1”的目的也许正是:提供一种快速创建抖动图像的方法。让我们看看这个简短的例子:

from matplotlib import pyplot as plt
import numpy as np
from PIL import Image

plt.figure(1, figsize=(15, 5))

# Open some image
img = Image.open('path/to/your/image.png')
plt.subplot(1, 3, 1), plt.imshow(img)

# Convert to '1'; dithering activated by default
plt.subplot(1, 3, 2), plt.imshow(img.convert('1'))

# Convert to '1'; dithering deactivated
plt.subplot(1, 3, 3), plt.imshow(img.convert('1', dither=Image.NONE))

plt.tight_layout()
plt.show()

这就是输出:

Output

抖动的图像在足够小的情况下看起来很像通常的灰度图像。禁用抖动时(右图),您实际上会得到一个阈值图像,其中所有 >= 128 的值都设置为白色,否则设置为黑色。

希望有帮助!

-----------------------
System information
-----------------------
Python: 3.8.1
Matplotlib: 3.2.0rc1
NumPy: 1.18.1
Pillow: 7.0.0
-----------------------

关于python - 奇怪的 PIL.Image.fromarray 行为,numpy 零和模式为 ='1',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59672473/

46 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com