使用Python图像库PIL,如何才能检测出图像中所有的像素都是黑色还是白色?
~更新~
条件:不是遍历每个像素!
发布于 2012-12-26 22:19:55
if not img.getbbox():
..。将测试图像是否完全为黑色。(如果图像中没有非黑色像素,则Image.getbbox()
返回falsy None
,否则返回一个点的元组,这是真的。)要测试图像是否为全白,请先将其反转:
if not ImageChops.invert(img).getbbox():
您也可以使用img.getextrema()
。这将告诉您图像中的最高和最低值。要最容易地处理此问题,您可能应该首先将图像转换为灰度模式(否则,极值可能是RGB或RGBA元组,或者是单个灰度值,或者是索引,而您必须处理所有这些内容)。
extrema = img.convert("L").getextrema()
if extrema == (0, 0):
# all black
elif extrema == (1, 1):
# all white
后一种方法可能会更快,但在大多数应用程序中您不会注意到这一点(这两种方法都很快)。
测试黑色或白色的上述技术的单行版本:
if sum(img.convert("L").getextrema()) in (0, 2):
# either all black or all white
发布于 2016-08-04 00:43:04
在Kindall上展开:如果您使用以下命令查看名为img的图像:
extrema = img.convert("L").getextrema()
它为您提供了图像中的一系列值。因此,全黑图像为(0,0),全白图像为(255,255)。所以你可以看看:
if extrema[0] == extrema[1]:
return("This image is one solid color, so I won't use it")
else:
# do something with the image img
pass
当我从一些数据创建缩略图,并希望确保它正确读取时,这对我很有用。
发布于 2015-03-07 21:17:44
from PIL import Image
img = Image.open("test.png")
clrs = img.getcolors()
clrs
包含[("num of occurences","color"),...]
通过检查len(clrs) == 1
,可以验证图像是否只包含一种颜色,通过查看clrs
中第一个元组的第二个元素,可以推断颜色。
在图像包含多种颜色的情况下,如果99%的像素共享相同的颜色,那么通过考虑出现的次数,您还可以处理几乎完全单色的图像。
https://stackoverflow.com/questions/14041562
复制相似问题