删除包含零像素值的栅格

问题描述

如果 .tif 仅包含全零像素值,因此是黑色图像,我有一个工作代码将遍历文件夹,识别和删除。问题是我的文件夹中有 12,000 张图像,这个过程需要很长时间才能完成。我想知道是否有更快的方法可以做到这一点?

from PIL import Image
import os


directory = 'D:/images/'
for image in os.listdir(directory):
    indiv = Image.open(directory + image)
    pixel_values = list(indiv.getdata())
    y = len(pixel_values)

    list_yes = []
    for RGBA in pixel_values:
        if RGBA == (0,0):
            Black_image = 'yes'
            list_yes.append(Black_image)
            x = len(list_yes)
            if x == y:
                os.remove(directory + image)

黑色 .tif 的输出

(0,0)
(0,0)
....
Like 400,000 more rows of this

解决方法

这应该会快很多

directory = 'D:/images/'
for image in os.listdir(directory):
    indiv = Image.open(directory + image)
    if all(pixels == (0,0) for pixels in list(indiv.getdata())):
        os.remove(directory + image)

我也不确定是否需要 list(...),我对 PIL 不太熟悉。如果它没有工作,删除它应该会导致另一个加速。