You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何筛选含条件元素的大量图片?实现单张图片审核与名称留存判断

针对图片筛选+交互式留存需求的解决方案

我来帮你搞定这两个需求,分两种场景给你方案:一种是用Python脚本自定义实现(灵活度拉满),另一种是用现成工具快速解决(不用写一行代码)。

方案一:Python脚本自定义实现(完全可控)

1. 批量筛选符合条件的图片

筛选需求分两类,我都给你写好示例代码:

(1)基于元数据/属性筛选(比如尺寸、格式、拍摄日期)

用Pillow库就能轻松搞定,先安装依赖:

pip install pillow

比如筛选宽度≥1920像素且格式为JPG/PNG的图片,脚本如下:

from PIL import Image
import os

def filter_images_by_metadata(folder_path, min_width=1920, allowed_formats=('jpg', 'jpeg', 'png')):
    filtered = []
    for filename in os.listdir(folder_path):
        ext = filename.split('.')[-1].lower()
        if ext not in allowed_formats:
            continue
        try:
            with Image.open(os.path.join(folder_path, filename)) as img:
                width, height = img.size
                if width >= min_width:
                    filtered.append(filename)
                    print(f"符合条件:{filename}")
        except Exception as e:
            print(f"无法读取{filename}:{e}")
    # 把筛选结果保存到文件
    with open("filtered_images.txt", "w") as f:
        f.write('\n'.join(filtered))
    print(f"筛选完成,共找到{len(filtered)}张符合条件的图片,结果已保存到filtered_images.txt")

# 替换成你的图片文件夹路径
filter_images_by_metadata("/path/to/your/image/folder")

如果需要按拍摄日期筛选,可以加exifread库读取EXIF信息,安装后在脚本里加判断逻辑就行。

(2)基于图像内容筛选(比如包含特定物体、颜色)

如果要筛选包含特定内容的图片,比如红色物体、猫,用OpenCV做简单识别:
先安装依赖:

pip install opencv-python numpy

示例:筛选**红色占比超过10%**的图片:

import cv2
import numpy as np
import os

def filter_images_by_color(folder_path, threshold=0.1):
    filtered = []
    # 定义红色的HSV范围
    lower_red = np.array([0, 120, 70])
    upper_red = np.array([10, 255, 255])
    lower_red2 = np.array([170, 120, 70])
    upper_red2 = np.array([180, 255, 255])

    for filename in os.listdir(folder_path):
        ext = filename.split('.')[-1].lower()
        if ext not in ('jpg', 'jpeg', 'png'):
            continue
        img_path = os.path.join(folder_path, filename)
        img = cv2.imread(img_path)
        if img is None:
            print(f"无法读取{filename}")
            continue
        hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
        mask1 = cv2.inRange(hsv, lower_red, upper_red)
        mask2 = cv2.inRange(hsv, lower_red2, upper_red2)
        mask = mask1 + mask2
        # 计算红色区域占比
        red_pixels = cv2.countNonZero(mask)
        total_pixels = img.shape[0] * img.shape[1]
        if red_pixels / total_pixels >= threshold:
            filtered.append(filename)
            print(f"符合条件:{filename}")
    with open("color_filtered_images.txt", "w") as f:
        f.write('\n'.join(filtered))
    print(f"筛选完成,共找到{len(filtered)}张符合条件的图片")

filter_images_by_color("/path/to/your/image/folder")

2. 交互式逐个查看并留存文件名

这个脚本会遍历图片,逐个打开让你查看,输入y就记录文件名,输入n跳过,最后生成留存列表:

from PIL import Image
import os
import subprocess

def open_image(img_path):
    # 根据系统选择默认打开方式
    if os.name == 'nt':
        os.startfile(img_path)
    elif os.name == 'posix':
        subprocess.run(['open' if os.uname().sysname == 'Darwin' else 'xdg-open', img_path])

def interactive_select_images(folder_path):
    keep_list = []
    image_files = [f for f in os.listdir(folder_path) if f.lower().endswith(('jpg', 'jpeg', 'png'))]
    for idx, filename in enumerate(image_files, 1):
        img_path = os.path.join(folder_path, filename)
        print(f"正在查看第{idx}/{len(image_files)}张:{filename}")
        try:
            open_image(img_path)
            # 等待用户输入
            choice = input("留存此图片?(y/n,输入q退出):").lower()
            if choice == 'y':
                keep_list.append(filename)
                print(f"已添加到留存列表")
            elif choice == 'q':
                break
        except Exception as e:
            print(f"无法打开{filename}:{e}")
            continue
    # 保存留存列表
    with open("kept_images.txt", "w") as f:
        f.write('\n'.join(keep_list))
    print(f"交互完成,共留存{len(keep_list)}张图片,列表已保存到kept_images.txt")

interactive_select_images("/path/to/your/image/folder")

方案二:现成工具快速解决(无需编程)

如果你不想写代码,这些工具能快速搞定:

1. 批量筛选图片

  • Windows/macOS通用:用XnView MP,支持按尺寸、格式、EXIF信息(拍摄日期、相机型号)筛选,还能简单识别图像内容(比如颜色、物体),筛选后可以直接导出文件名列表。
  • Linux:用find命令结合identify(ImageMagick工具),比如筛选宽度≥1920的JPG:
find /path/to/folder -type f -name "*.jpg" -exec identify -format "%w %f\n" {} \; | awk '$1 >= 1920 {print $2}' > filtered.txt

2. 交互式查看留存

  • Windows:用IrfanView,打开图片文件夹后进入幻灯片模式(按S),按M标记要留存的图片,最后在文件→批量重命名/转换里导出标记的文件名,或者直接把标记的图片复制到新文件夹。
  • macOS/Linux:用feh图片查看器,绑定快捷键记录选中的图片,比如先安装feh,然后运行:
feh -F /path/to/folder --action1 "echo %f >> kept_images.txt"

按1键就会把当前图片名写入kept_images.txt,按右箭头跳转到下一张。

注意事项

  • 操作前一定要备份原图片文件夹,避免误操作导致文件丢失。
  • 处理上千张图片时,Python脚本可能需要一点时间,耐心等待就行。
  • 如果是内容筛选,简单的颜色/物体识别可能有误差,你可以根据需求调整阈值或模型。

内容的提问来源于stack exchange,提问作者Ziv Kassner

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 08:29:33