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)
相关推荐
许彰午21 分钟前
100_Python面试常见问题汇总
java·python·面试
zandy101124 分钟前
多租户SaaS架构下的BI数据隔离与权限治理体系
数据库·架构·数据加密
qq_4198540526 分钟前
空间网格管理器
前端·javascript·html
qingmiaozhuan27 分钟前
电脑录屏没有声音还能补救吗?音频采集链路详解及4种技术方案
前端·电脑·音视频·开发工具·电脑录屏·电脑录屏软件
天若有情67337 分钟前
Dev_Portfolio 个人主页html网页源码分享!!!
前端·html·源码·个人主页
weixin_7275356238 分钟前
Spring @Transactional 事务失效:原理层面深度解析
java·spring
数字孪生家族1 小时前
3DGS 数据编辑单体化技术:将高斯重建转化为结构化数字空间资产
数据库·3d·高斯泼溅·空间智能应用
广州灵眸科技有限公司1 小时前
瑞芯微RV1126B开发板(EASY-EAI-PI2) 系统操作-线进程操作
数据库·单片机·嵌入式硬件·算法·php
李剑一1 小时前
ant-design-vue 1.x 版本换肤功能开发
前端·vue.js·ant design
京东云开发者1 小时前
【Coding生态】从代码托管到 AI 能力底座:与Coding一起共建 AI 研发生态
前端