奇怪的 PIL.Image.fromarray 行为,模式为 '1' 时 numpy 零和一

2024-01-29

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

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

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

结果图片

问题:我做错了什么?

UPD. i've tried using np.dtype uint8, didn't worked: enter image description here

Final acceptable UPD: Seem there is a PIL bug, what wasn't fixed for some time, so then you should be using a workarond to create a white rectangle that way. Strange but now I'm not even sure what mode '1' is even meant for :D enter image description here


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

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

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

正如前面指出的 https://stackoverflow.com/a/59082917/11089932,当转换为模式“1”时,抖动 https://en.wikipedia.org/wiki/Dither默认情况下已激活。所以,也许模式“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()

这就是输出:

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

希望有帮助!

-----------------------
System information
-----------------------
Python:      3.8.1
Matplotlib:  3.2.0rc1
NumPy:       1.18.1
Pillow:      7.0.0
-----------------------
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

奇怪的 PIL.Image.fromarray 行为,模式为 '1' 时 numpy 零和一 的相关文章

  • matplotlib 图中点的标签

    所以这是一个关于已发布的解决方案的问题 我试图在我拥有的 matplotlib 散点图中的点上放置一些数据标签 我试图在这里模仿解决方案 是否有与 MATLAB 的 datacursormode 等效的 matplotlib https s
  • VSCode Settings.json 丢失

    我正在遵循教程 并尝试将 vscode 指向我为 Scrapy 设置的虚拟工作区 但是当我在 VSCode 中打开设置时 工作区设置 选项卡不在 用户设置 选项卡旁边 我还尝试通过以下方式手动转到文件 APPDATA Code User s
  • 使用主题交换运行多个 Celery 任务

    我正在用 Celery 替换一些自制代码 但很难复制当前的行为 我期望的行为如下 创建新用户时 应向tasks与交换user created路由键 该消息应该触发两个 Celery 任务 即send user activate email
  • 在 Django Admin 中调整字段大小

    在管理上添加或编辑条目时 Django 倾向于填充水平空间 但在某些情况下 当编辑 8 个字符宽的日期字段或 6 或 8 个字符的 CharField 时 这确实是一种空间浪费 字符宽 然后编辑框最多可容纳 15 或 20 个字符 我如何告
  • Python 3d 绘图设置固定色阶

    我正在尝试绘制两个 3d 数组 第一个数组的 z 值在范围内 0 15 0 15 第二个来自 0 001 0 001 当我绘图时 色标自动遵循数据范围 如何设置自定义比例 我不想看到 0 001 的浅色 而应该看到 0 15 的浅色 如何修
  • 通过 $_SESSION 从一个脚本发送到另一个脚本期间数据丢失

    我正在尝试将一个充满属性的对象从一个 PHP 发送到另一个 PHP SESSION object obj where obj是一个用 foreach 循环指定的对象 foreach array of objects as obj SESSI
  • 为什么这两种不同的构造数组的方式会产生不同的行为?

    当我以两种不同的方式构造一个 2 元素数组时 例如a and b 当我将一个元素添加到内部数组之一时 我得到两个不同的结果 这也会发生在append 根据构建每个之后的输出 我希望它们完全相同 julia gt a 2 element Ar
  • PHP 中只保留数组的前 N ​​个元素? [复制]

    这个问题在这里已经有答案了 有没有办法只保留数组的前 N 个 例如 10 个 元素 我知道有array pop 但是有没有更好 更优雅的方法呢 您可以使用array slice http php net array slice or arr
  • 从 Powershell 脚本安装 Python

    当以管理员身份从 PowerShell 命令行运行以下命令时 可以在 Windows 11 上成功安装 Python c temp python 3 11 4 amd64 exe quiet InstallAllUsers 0 Instal
  • Java 和 Python 可以在同一个应用程序中共存吗?

    我需要一个 Java 实例直接从 Python 实例数据存储中获取数据 我不知道这是否可能 数据存储是否透明 唯一 或者每个实例 如果它们确实可以共存 都有其单独的数据存储 总结一下 Java 应用程序如何从 Python 应用程序的数据存
  • python的shutil.move()在linux上是原子的吗?

    我想知道python的shutil move在linux上是否是原子的 如果源文件和目标文件位于两个不同的分区上 行为是否不同 或者与它们存在于同一分区上时的行为相同吗 我更关心的是如果源文件和目标文件位于同一分区上 shutil move
  • pandas - 包含时间序列数据的堆积条形图

    我正在尝试使用时间序列数据在 pandas 中创建堆积条形图 DATE TYPE VOL 0 2010 01 01 Heavy 932 612903 1 2010 01 01 Light 370 612903 2 2010 01 01 Me
  • 在 Google App Engine 中,如何避免创建具有相同属性的重复实体?

    我正在尝试添加一个事务 以避免创建具有相同属性的两个实体 在我的应用程序中 每次看到新的 Google 用户登录时 我都会创建一个新的播放器 当新的 Google 用户在几毫秒内进行多个 json 调用时 我当前的实现偶尔会创建重复的播放器
  • 带有 LSTM 的 GridSearchCV/RandomizedSearchCV

    我一直在尝试通过 RandomizedSearchCV 调整 LSTM 的超参数 我的代码如下 X train X train reshape X train shape 0 1 X train shape 1 X test X test
  • python 中的“槽包装器”是什么?

    object dict 和其他地方的隐藏方法设置为这样的
  • 每当使用 import cv2 时 OpenCV 都会出错

    我在终端上使用 pip3 install opencv contrib python 安装了 cv2 并且它工作了 但是每当我尝试导入 cv2 或运行导入了 cv2 的 vscode 文件时 在 python IDLE 上它都会说 Trac
  • 重新分配唯一值 - pandas DataFrame

    我在尝试着assign unique值在pandas df给特定的个人 For the df below Area and Place 会一起弥补unique不同的价值观jobs 这些值将分配给个人 总体目标是使用尽可能少的个人 诀窍在于这
  • 制作一份 Python 文档的 PDF 文件

    Python 官方网站提供 PDF 文档下载 但它们是按章节分隔的 我下载了源代码并构建了 PDF 文档 这些文档也是单独的 PDF 我怎么能够从源代码中的 Makefile 构建一个 PDF 文件 我认为这样阅读起来会更方便 如果连接单独
  • 如何使用 Boto3 启动具有 IAM 角色的 EC2 实例?

    我无法弄清楚如何使用指定的 IAM 角色在 Boto3 中启动 EC2 实例 以下是迄今为止我如何成功创建实例的一些示例代码 import boto3 ec2 boto3 resource ec2 region name us west 2
  • NLTK:查找单词大小为 2k 的上下文

    我有一个语料库 我有一个词 对于语料库中该单词的每次出现 我想获取一个包含该单词之前的 k 个单词和该单词之后的 k 个单词的列表 我在算法上做得很好 见下文 但我想知道 NLTK 是否提供了一些我错过的功能来满足我的需求 def size

随机推荐

  • 使用elasticsearch-river-mysql将数据从MySQL数据库流式传输到Elasticsearch

    我想用Elasticsearch 河 mysql https github com scharron elasticsearch river mysql以便不断地将数据从 MySQL 数据库传输到 ElasticSearch 我是 ES 和
  • 检查函数是否属于/哪个工具箱

    我们的工作站上安装了一个相对 丰富 的matlab 我现在需要发送一些代码到 并且我想检查它需要哪些工具箱才能正常工作 最简单的方法是什么 如何找出某个功能属于哪个工具箱 我看到两个问题 我要发送的函数需要哪些工具箱 你需要生成一个依赖性报
  • STATICFILES_DIRS 设置不应包含 STATIC_ROOT 设置

    我正在使用 Django 1 7 将我的网站部署到生产服务器并运行时collectstatic 我收到以下错误消息 django core exceptions ImproperlyConfigured STATICFILES DIRS 设
  • 将反应本机升级到最新版本

    我有一个在react native 0 49 3 上运行的应用程序 我想升级到最新版本 v0 57 4 我应该逐步更新它吗 例如 0 49 gt 0 50 gt 0 51 等 或者我可以直接更新到最新版本吗 你建议使用react nativ
  • 委托和谓词查询

    我正在学习 lambda 并试图理解为什么 同时拥有 EmployeeFilterAge 类 如下所示 public class EmployeeFilterAge int age public EmployeeFilterAge int
  • iOS 8 Safari 打印重定向不会停止 javascript 执行

    我需要提供在成功保存时以及打印重定向到搜索页面后打印标签的能力 这适用于 chrome firefox ie iOS 6 7 safari 等 但是 当从 javascript 发出 window print 时 iOS 8 似乎不再停止
  • 运行 zipalign 时出错

    尝试在 Eclipse 中导出签名的 apk 时出现此错误 运行 zipalign 时出错 打不开 作为 zip 存档 我已运行 帮助 gt 检查更新 以确保安装了最新更新并且 SDK 工具也是最新的 我收到了同样的错误消息 让我发疯 直到
  • 从类路径中动态删除 jar

    我有一个要求 必须根据从 UI 捕获分布的分布来更改 jar 一组与另一组的分布各不相同 如果选择了某个发行版 则必须以动态 编程方式将与该发行版相关的 jar 添加到类路径中 如果选择另一个发行版 则必须动态地从类路径中删除添加到类路径的
  • 返回只出现一次的数字 (JavaScript)

    假设我有数组 1 2 3 5 2 1 4 如何让 JS 返回 3 4 5 我在这里查看了其他问题 但它们都是关于删除多次出现的数字的副本 而不是原始文件和副本 Thanks Use Array filter https developer
  • 调用 win32 API 并对类函数进行回调

    我试图通过将一些现有的 win32 UI 代码放入一个类中来清理它 以前我有一个像这样的 AppDlgProc 函数 BOOL CALLBACK AppDlgProc HWND hDlg UINT uMsg WPARAM wParam LP
  • 将 JTextField 添加到游戏菜单 (graphics2d)

    我正在开发一款多人游戏 在菜单中 我需要添加一个字段 玩家可以在其中输入主机 IP 我正在使用 Graphics2D 制作菜单 并循环更新它 JFrame screenFrame screen getFullScreenWindow whi
  • 自定义 UITableViewCell prepareForReuse 未按预期工作

    My prepareForReuse无法正常工作 我有一个UITableView那应该有一个login UIButton仅在表的第一部分的第一行中 但当 在prepareForReuse 我删除了login按钮 它会保留并进入下一批行 视频
  • 在 Jekyll 中显示一个文件夹下的页面?

    我认为管理 Jekyll 页面的本机方式 即通过在根文件夹下创建 md 文件 文件夹 有点混乱 因此 我想将我想要显示的每个页面放入名为 pages 的文件夹中 此外 我希望这些页面具有级联结构 假设我的文件夹具有以下结构 pages gt
  • 为什么标签的 href 属性会打印到屏幕上? [复制]

    这个问题在这里已经有答案了 可能的重复 显示带有蓝图的 URL 的超链接 https stackoverflow com questions 4258417 hyperlinks showing url with blueprint DOM
  • 扩展 umbraco 仪表板

    我想将我自己的部分添加到 umbraco 仪表板 以便我可以将我自己的管理部分集成到现有的登录 管理结构中 这是否可以在不编辑和重新编译 umbraco 源代码本身的情况下实现 推荐吗 如果是这样 有人有资源开始这样做吗 是的 这是可能的
  • Ios的Uiwebview可以打开.mht或者.mhtml文件吗

    是否有任何标准将 mht 文件转换为 html 所以我可以在 iosWebview 中打开它 我可以在 ios webview 中打开 mht 文件吗 是否有任何库或第三方工具可以执行相同的操作 None
  • 我无法使用 ChromeDriverManager().install() 安装 ChromeDriverManager

    我已经学习Python 2个月了 这个错误从来没有在我身上发生过一次 但突然我无法下载CHROMEDRIVERMANAGER 每当我进入其网站手动下载它时 它就会说 该 XML 文件似乎没有任何样式信息 文档树如下所示 错误 Access
  • 如何将 PyCharm 连接到位于 Docker 容器内的 python 解释器?

    我从 Docker 开始 但我不知道如何配置 PyCharm 以使用位于容器中的 python 解释器 使用 Vagrant 设置很容易 https www jetbrains com pycharm quickstart configur
  • 为什么Graphics类中的drawPolygon方法是抽象的而我仍然可以使用它

    In 图形类 http download oracle com javase 1 4 2 docs api java awt Graphics html drawPolygon 28int 5B 5D 20int 5B 5D 20int 2
  • 奇怪的 PIL.Image.fromarray 行为,模式为 '1' 时 numpy 零和一

    对我来说应该有一些谜题 根据 PIL 文档 它具有不同的图像模式 如 1 L 8 RGB RGBA 等 但我对模式 1 感兴趣 1 位像素 黑白 每个像素存储一个像素 字节 我创建了 2 个大小为 100 x 100 的矩阵 第一个只有零