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

如何按文件名排序图片并计算均值与标准差(Python实现)

问题解答与代码优化建议

一、关于文件名升序排序

当然可以实现,只需要先筛选出目标图片文件,再对文件列表进行升序排序即可,Python的sorted()函数默认按字符串升序排列,刚好匹配文件名的排序需求。

二、代码具体优化建议与修改点

1. 实现排序逻辑

原代码先遍历所有文件再判断后缀,建议先筛选出符合格式的图片文件,再进行排序,这样更高效:

# 替换原有的listOfImageFiles和筛选逻辑
image_files = sorted(
    [f for f in os.listdir(dir_path) if f.lower().endswith(fileext)]
)

这里用lower()是为了兼容大写后缀的情况(比如.PNG、.JPG),避免漏处理。

2. 避免重复读取图片

你当前代码里用Image.open()和mahotas.imread()分别读取了同一张图片,属于重复IO操作,会拖慢程序速度。建议二选一:

  • 如果只需要统计均值和标准差,用PIL的ImageStat.Stat就足够,不需要mahotas;
  • 如果需要对图片数组做后续操作,用mahotas读取后,用numpy计算均值和标准差即可,不需要PIL。

3. 完善文件后缀匹配

原代码的fileext里,建议给所有后缀补全点号(比如不要写png,要写.png),避免误匹配类似testpng这种不带后缀的文件;同时用lower()处理文件名,兼容大小写后缀。

4. 添加异常处理

图片文件可能存在损坏、格式不兼容的情况,直接读取会导致程序崩溃,建议加上异常捕获:

try:
    # 图片读取与统计代码
except Exception as e:
    print(f"处理文件 {image_file} 出错: {str(e)}")

5. 优化输出可读性

当前只打印均值和标准差,无法对应到具体文件,建议输出时带上文件名,方便后续核对结果。

修改后的完整代码示例

import os
from PIL import Image, ImageStat
import numpy as np
import mahotas

dir_path = "The file path"
fileext = ('.png', '.jpg', '.jpeg')

# 筛选并按文件名升序排序图片文件
image_files = sorted(
    [f for f in os.listdir(dir_path) if f.lower().endswith(fileext)]
)

for image_file in image_files:
    img_path = os.path.join(dir_path, image_file)
    print(f"=== 处理文件: {image_file} ===")
    try:
        # 方案1:使用PIL完成统计(无需额外数组操作)
        with Image.open(img_path) as im:
            stat = ImageStat.Stat(im)
            print(f"PIL均值: {stat.mean}")
            print(f"PIL标准差: {stat.stddev}")

        # 方案2:使用mahotas+numpy统计(适合后续数组处理)
        # img = mahotas.imread(img_path)
        # mean = img.mean()
        # std_dev = np.std(img)
        # print(f"Mahotas均值: {mean}")
        # print(f"Mahotas标准差: {std_dev}")

    except Exception as e:
        print(f"读取失败: {str(e)}")
    print()  # 空行分隔不同文件的结果

内容的提问来源于stack exchange,提问作者Neko Lim

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 04:45:35