检查图像是否为黑色

3
我正在Windows下运行一个Python脚本,处理32位深度的480x800 PNG图像。我需要检查给定的图像是否完全是黑色的。经过一些搜索,我发现ImageMagick可以帮助我实现这个目标,但不幸的是没有针对这种任务的手册。
那么一个更普遍的问题是如何检查图像是否只由一种颜色组成?
编辑:
很抱歉我没有从一开始提供有关环境的所有信息。Python脚本使用Android的{{link1:monkeyrunner}}执行。由于它使用自己的Jython实例(版本2.5),因此无法使用来自外部库的任何模块。内部有一个MonkeyImage类用于处理从设备中获取的屏幕截图。所以我采用了@eumiro的答案。
2个回答

4
import Image
im = Image.load("image.png")
diff_colors = list(set(im.getdata()))
if len(diff_colors) == 1 and diff_colors[0] == (0, 0, 0):
    print "all black"

编辑 按照 @JonClements 的建议,这种方法会更快,并且在找到除黑色以外的任何颜色时停止:

import Image
im = Image.load("image.png")
if all(rgb == (0,0,0) for rgb in im.getdata()):
    print "all black"

4
如果im.getdata()中的所有RGB值都为(0,0,0),则返回True。 - Jon Clements
我的环境中没有“Image”模块,所以将其用作样例来解决问题,谢谢。 - Andrey Ermakov
@AndreyErmakov 这是一个有用的库(PIL)- 安装它肯定不会有坏处 ;) - Jon Clements
@JonClements 我实际上是在 Android 的 monkeyrunner 中运行它,似乎它使用自己的 Jython 实例。因此,我使用了它提供的 MonkeyImage 对象相同的方法。 - Andrey Ermakov
@AndreyErmakov 很好!也许你能够友善地更新一下你的问题,这样未来的其他人就可以更容易地找到它了? - Jon Clements

1

我不是 Python 专家,但我看到有一个可以使用的 PNG 模块。 加载 PNG 并将其导出为 RGB(A)数组。

然后检查是否完全黑色应该很简单。遍历数组并确保没有任何与 0 不同的元素。

我认为这应该有效。

出于好奇,你为什么想要检查图像是否是黑色?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接