如何将灰度图像转换为像素值列表?

2024-04-27

我正在尝试创建一个 python 程序,它采用灰度、24*24 像素图像文件(我尚未决定类型,因此欢迎提出建议)并将其转换为从 0(白色)到 255 的像素值列表(黑色的)。

我计划使用这个数组来创建一个MNIST http://yann.lecun.com/exdb/mnist/-类似于图片的字节文件,可以被Tensor-Flow手写识别算法识别。

我已经找到了枕头库 http://pillow.readthedocs.io/通过迭代每个像素并将其值附加到数组中,成为此任务中最有用的

from PIL import Image

img = Image.open('eggs.png').convert('1')
rawData = img.load()
data = []
for y in range(24):
    for x in range(24):
        data.append(rawData[x,y])

然而这个解决方案有两个问题:

  1. 像素值不是存储为整数,而是存储为像素对象,无法进一步进行数学操作,因此无用。
  2. Even the Pillow docs https://pillow.readthedocs.io/en/latest/reference/PixelAccess.html#pixelaccess-class state that:

    访问单个像素相当慢。如果您要循环遍历图像中的所有像素,则可能有一种使用 Pillow API 的其他部分更快的方法。


您可以将图像数据转换为 Python 列表(或列表列表),如下所示:

from PIL import Image

img = Image.open('eggs.png').convert('L')  # convert image to 8-bit grayscale
WIDTH, HEIGHT = img.size

data = list(img.getdata()) # convert image data to a list of integers
# convert that to 2D list (list of lists of integers)
data = [data[offset:offset+WIDTH] for offset in range(0, WIDTH*HEIGHT, WIDTH)]

# At this point the image's pixels are all in memory and can be accessed
# individually using data[row][col].

# For example:
for row in data:
    print(' '.join('{:3}'.format(value) for value in row))

# Here's another more compact representation.
chars = '@%#*+=-:. '  # Change as desired.
scale = (len(chars)-1)/255.
print()
for row in data:
    print(' '.join(chars[int(value*scale)] for value in row))

这是小型 24x24 RGB 的放大版本eggs.png https://i.stack.imgur.com/uEojM.png我用于测试的图像:

这是第一个访问示例的输出:

这是第二个示例的输出:

@ @ % * @ @ @ @ % - . * @ @ @ @ @ @ @ @ @ @ @ @
@ @ .   . + @ # .     = @ @ @ @ @ @ @ @ @ @ @ @
@ *             . .   * @ @ @ @ @ @ @ @ @ @ @ @
@ #     . .   . .     + % % @ @ @ @ # = @ @ @ @
@ %       . : - - - :       % @ % :     # @ @ @
@ #     . = = - - - = - . . = =         % @ @ @
@ =     - = : - - : - = . .     . : .   % @ @ @
%     . = - - - - : - = .   . - = = =   - @ @ @
=   .   - = - : : = + - : . - = - : - =   : * %
-   .   . - = + = - .   . - = : - - - = .     -
=   . : : . - - .       : = - - - - - = .   . %
%   : : .     . : - - . : = - - - : = :     # @
@ # :   .   . = = - - = . = + - - = - .   . @ @
@ @ #     . - = : - : = - . - = = : . .     # @
@ @ %     : = - - - : = -     : -   . . .   - @
@ @ *     : = : - - - = .   . - .   .     . + @
@ #       . = - : - = :     : :   .   - % @ @ @
*     . . . : = = - : . .   - .     - @ @ @ @ @
*   . .       . : .   . .   - = . = @ @ @ @ @ @
@ :     - -       . . . .     # @ @ @ @ @ @ @ @
@ @ = # @ @ *     . .     . - @ @ @ @ @ @ @ @ @
@ @ @ @ @ @ @ .   .   . # @ @ @ @ @ @ @ @ @ @ @
@ @ @ @ @ @ @ -     . % @ @ @ @ @ @ @ @ @ @ @ @
@ @ @ @ @ @ @ # . : % @ @ @ @ @ @ @ @ @ @ @ @ @

现在访问像素数据应该比使用对象更快img.load()返回(并且值将是 0..255 范围内的整数)。

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

如何将灰度图像转换为像素值列表? 的相关文章

随机推荐

  • 将数字缩放为 <= 255?

    我的单元格的数值可以是 0 到 0 之间的任何值Integer MAX VALUE 我想对这些单元格进行相应的颜色编码 如果该值 0 则 r 0 如果该值是Integer MAX VALUE 则 r 255 但是中间的值呢 我想我需要一个函
  • D3.js - 如何迭代数据集中的子数组

    我试图让 d3 迭代数据中的子数组并生成多个饼图 这是完整的代码 来自https gist github com mbostock 1305111 https gist github com mbostock 1305111 and htt
  • 为 ListView 最后一个元素添加下边距

    我需要添加具有复杂项目背景的 ListView 顶部和底部的偶数 奇数和圆角不同 它看起来像这样 我已经通过级别列表实现了所有这些东西 但我还想做一件事 现在底部项目位于屏幕底部附近 最好添加一些空间 我不想向 ListView 添加底部边
  • 如何将 3D 图像输出到 3D 电视?

    我有一台 3D 电视 如果我不至少尝试让它显示我自己创作的漂亮 3D 图像 我就会逃避我的责任 作为一个极客 我之前已经完成了非常基本的 OpenGL 编程 因此我了解所涉及的概念 假设我可以为自己渲染一个简单的四面体或立方体并使其旋转一点
  • 将 Java `sort` 签名转换为 `? super T` 到​​ Scala(泛型)

    问题 看着这个问题 https stackoverflow com questions 16430355 translating generic 20wildcards from java to scala关于迁移 Java 签名 publ
  • Microsoft 计算机视觉 API 或 Google 的 Cloud Vision API 是否可以获取对象的位置?

    我正在尝试开发一个需要知道图像中标记对象位置的应用程序 知道图像中有一架 钢琴 还不够 我需要知道钢琴在图像中的位置 微软的计算机视觉 API 和谷歌的云视觉 API 都提供了某种形式的裁剪建议 智能缩略图生成服务 这让我认为某些对象的位置
  • 在groovy中将变量标记为final是否有意义?

    我想知道变量如何标记为final由 Groovy 解释 在 1 8 0 1 8 1 中 我知道这在 Java 中是有意义的 并且可以提高性能 当然还有助于避免愚蠢的错误 我想了解如果final可以帮助java编译器优化用Groovy编写的程
  • 如何在iOS Mantle模型子类中设置默认值

    interface Entity property assign int searchTotalPagesAll property assign int searchTotalPagesIdeas end implementation En
  • 如何检查每个观察中的最小日期并动态更新标志

    我必须每次检查最短日期并向其添加 30 天并相应地设置字段 例如 我的桌子 ID StartDate EndDate 1 2017 01 01 2017 02 01 1 2017 01 09 2017 01 28 1 2017 04 01
  • 从另一个刚刚编译的程序集编译程序集

    我需要在内存中编译程序集 这样可以编译另一个程序集 有一个带有一个按钮的表格 这是表单的代码 using System using System IO using System CodeDom using System CodeDom Co
  • Bazel远程缓存分析数据

    我正在 jenkins 上的 docker 容器内运行 bazel 通过 bazelisk 此外 我使用远程缓存 在不进行任何更改的后续运行中 我获得 100 的缓存命中 但每次创建新容器时都会运行分析阶段 约 60 秒 有没有办法远程缓存
  • 为什么我的音频不倒带?

    我在 Javascript 中倒带音频时遇到了一些问题 我基本上有一个倒计时 当倒计时接近结束时 每秒都会发出蜂鸣声 我尝试使用 var bip new Audio http www soundjay com button beep 7 w
  • PL/SQL 打印存储过程返回的引用游标

    如何从存储过程 OUT 变量 返回的引用游标中获取数据并将结果行打印到 SQL PLUS 中的 STDOUT ORACLE存储过程 PROCEDURE GetGrantListByPI p firstname IN VARCHAR2 p l
  • 为什么我的 sed 命令在使用变量时失败?

    使用 bash 我尝试插入日期变量并搜索该日期的日志文件 然后将输出发送到文件 如果我像这样对日期进行硬编码 它会起作用 sed n Nov 22 2010 p file gt log file 但如果我这样做就会失败 date Nov 2
  • MVC 在视图之间传输数据

    我刚刚开始学习 MVC 并试图了解它是如何工作的 我不想将用户发送到所有编辑 插入和列表操作的不同视图 在我的示例应用程序中 视图包含项目列表 列表下方有一个带有操作 Controller Create 的表单 用于插入新项目 但没有创建视
  • 在cocos2d中添加UIViewController

    我想在 cocos2d 项目中显示 UIViewController 所以我在我的 CCLayer 类中执行此操作 void displayMainMenu CGSize screenSize CCDirector sharedDirect
  • RuntimeException 以外的异常

    Java中除了RuntimeException之外还有其他可能发生的异常吗 谢谢 是的 有Three kinds 检查异常 编译器会让您知道何时可能会抛出它们 最有可能是由于环境中的故障 如果程序可以用它们做某事 则应该捕获它们 否则最好让
  • Oracle:SQL 选择带时间戳的日期

    我有以下数据 SQL gt select from booking session BK ID BK DATE 1 18 MAR 12 10 00 00 000000 2 18 MAR 12 10 25 00 000000 3 18 MAR
  • 在哪里可以找到 Python 的 win32api 模块? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我需要下载 Python 2 7 的它 但似乎找不到它 还有一个新选项 通过 pip 获取 有一个包p
  • 如何将灰度图像转换为像素值列表?

    我正在尝试创建一个 python 程序 它采用灰度 24 24 像素图像文件 我尚未决定类型 因此欢迎提出建议 并将其转换为从 0 白色 到 255 的像素值列表 黑色的 我计划使用这个数组来创建一个MNIST http yann lecu