RGB 平均值统计

任务:有一一对应的图片多组如下,希望统计灰色部分原有grb平均值,彩色部分rgb平均值。

方法:由下图对各个像素分析,分为3类,并记录坐标,根据坐标统计上图的rgb平均值,结果放在一张Excel中。

python 复制代码
import os
import time
from PIL import Image
import openpyxl

def process_images(folder1, folder2, output_excel):
    start_time = time.time()  # 

    # 创建一个新的Excel工作簿
    wb = openpyxl.Workbook()
    ws = wb.active
    ws.title = "Image Analysis"
    ws.append(["Image Name", "Category", "Average R", "Average G", "Average B"])

    # 获取文件夹中的所有文件名
    files1 = [f for f in os.listdir(folder1) if f.endswith('.jpg')]
    files2 = [f for f in os.listdir(folder2) if f.endswith('.jpg.jpg')]

    # 确保文件名对应
    for file1 in files1:
        file2 = file1 + ".jpg"
        if file2 in files2:
            img1_path = os.path.join(folder1, file1)
            img2_path = os.path.join(folder2, file2)
            
            img1 = Image.open(img1_path)
            img2 = Image.open(img2_path)
            
            if img1.size != img2.size:
                print(f"Skipping {file1} and {file2} due to size mismatch.")
                continue
            
            pixels1 = img1.load()
            pixels2 = img2.load()
            
            categories = {
                'black': {'count': 0, 'total_r': 0, 'total_g': 0, 'total_b': 0},
                'gray': {'count': 0, 'total_r': 0, 'total_g': 0, 'total_b': 0},
                'other': {'count': 0, 'total_r': 0, 'total_g': 0, 'total_b': 0}
            }
            
            for y in range(img1.height):
                for x in range(img1.width):
                    r2, g2, b2 = pixels2[x, y]
                    
                    if (r2, g2, b2) == (0, 0, 0):
                        category = 'black'
                    elif (r2, g2, b2) == (169, 169, 169):
                        category = 'gray'
                    else:
                        category = 'other'
                    
                    r1, g1, b1 = pixels1[x, y]
                    categories[category]['count'] += 1
                    categories[category]['total_r'] += r1
                    categories[category]['total_g'] += g1
                    categories[category]['total_b'] += b1
            
            for category, data in categories.items():
                if data['count'] > 0:
                    avg_r = data['total_r'] / data['count']
                    avg_g = data['total_g'] / data['count']
                    avg_b = data['total_b'] / data['count']
                    ws.append([file1, category, avg_r, avg_g, avg_b])
                else:
                    ws.append([file1, category, 0, 0, 0])

    wb.save(output_excel)
    end_time = time.time()  # 结束计时
    elapsed_time = end_time - start_time
    print(f"Elapsed time: {elapsed_time:.2f} seconds")

# 使用示例
folder1 = '/folder1'  # 文件夹路径
folder2 = '/folder2'  # 
output_excel = 'output.xlsx'
process_images(folder1, folder2, output_excel)
相关推荐
小雨下雨的雨2 小时前
井字棋AI机器人实现详解 - Minimax算法实战-鸿蒙PC Electron框架完成
前端·人工智能·算法·华为·electron·鸿蒙
睡不醒男孩0308232 小时前
第二篇:深入探索开源数据库高可用:构建基于CLup的PostgreSQL生产级高可用与读写分离架构
数据库·postgresql·开源·clup
xieliyu.4 小时前
Java算法精讲:双指针(三)
java·开发语言·算法
明夜之约5 小时前
Spring Boot 自动装配源码
java·spring boot·后端
Leaton Lee5 小时前
Spring Boot分层架构详解:从Controller到Service再到Mapper的完整流程
java·spring boot·后端·架构
Micro麦可乐5 小时前
Spring Boot 实战:从零设计一个短链系统(含完整代码与数据库设计)
数据库·spring boot·后端·哈希算法·雪花算法·短链系统
Jinkxs5 小时前
Resilience4j- 与 Spring Boot 快速集成:自动配置与基础注解使用
java·spring boot·后端
辣机小司5 小时前
【踩坑记录:Spring Boot 配置文件读取值不一致?警惕 YAML 的“八进制陷阱”与 SnakeYAML 版本之谜】
java·spring boot·后端·yaml·踩坑记录
码农阿豪5 小时前
从零到一:Spring Boot快速接入金仓数据库实战
数据库·spring boot·后端
鼎讯信通5 小时前
风电光缆运维提质增效:G-4000A 光缆故障追踪仪破解风场巡检难题
运维·网络·数据库