from PIL import Image
im = Image.open('im.gif')
pixels = im.getdata() # get the pixels as a flattened sequence
black_thresh = 50
nblack = 0
for pixel in pixels:
if pixel < black_thresh:
nblack += 1
n = len(pixels)
if (nblack / float(n)) > 0.5:
print("mostly black")
彻底的方法是使用类似PIL的方法计算像素,如其他答案中所给出的那样。
但是,如果它们都是压缩图像,您可以检查文件大小,因为具有许多纯彩色区域的图像应该比具有变化的图像(如云层)压缩得更多。
通过一些测试,你至少可以找到一个启发性的方法,你知道有很多云的图像可以立即丢弃,而不必在它们的像素上花费昂贵的循环。其他接近50%的可以逐像素检查。
此外,在迭代像素时,不需要计算所有黑色像素,然后检查是否至少有50%是黑色的。取而代之的是,一旦你知道至少50%是黑色的,就停止计数并丢弃。
第二个优化:如果你知道图像通常是多云的,而不是黑色的,那就换个方向。计算非黑色像素的数量,一旦超过50%,停止并保存图像。
或者,如果像素R(或G或B)分量小于15,则返回true来检查它是否几乎为黑色。
您正在处理的gif从示例图像的外观来看大多是灰度的,因此您可能希望大多数RGB组件是相等的。
使用PIL:
根据需要在0(变黑)和255(亮白)之间调整“黑色”的阈值。
相关问题 更多 >
编程相关推荐