Python-找出一个图像中有多少是b

2024-06-09 20:57:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在下载这样的卫星图片 satellite_image
(来源:u0553130 at home.chpc.utah.edu

因为有些图片大多是黑色的,像这个,我不想保存它。

如何使用python检查图像是否超过50%为黑色?


Tags: 图像home来源图片atedu黑色utah
3条回答

彻底的方法是使用类似PIL的方法计算像素,如其他答案中所给出的那样。

但是,如果它们都是压缩图像,您可以检查文件大小,因为具有许多纯彩色区域的图像应该比具有变化的图像(如云层)压缩得更多。

通过一些测试,你至少可以找到一个启发性的方法,你知道有很多云的图像可以立即丢弃,而不必在它们的像素上花费昂贵的循环。其他接近50%的可以逐像素检查。

此外,在迭代像素时,不需要计算所有黑色像素,然后检查是否至少有50%是黑色的。取而代之的是,一旦你知道至少50%是黑色的,就停止计数并丢弃。

第二个优化:如果你知道图像通常是多云的,而不是黑色的,那就换个方向。计算非黑色像素的数量,一旦超过50%,停止并保存图像。

  • 加载图像
  • 读取每个像素,如果像素=(0,0,0),则递增结果
  • 如果结果=<;(image.width*image.height)/2
  • 保存图像

或者,如果像素R(或G或B)分量小于15,则返回true来检查它是否几乎为黑色。

您正在处理的gif从示例图像的外观来看大多是灰度的,因此您可能希望大多数RGB组件是相等的。

使用PIL:

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")

根据需要在0(变黑)和255(亮白)之间调整“黑色”的阈值。

相关问题 更多 >