RGB 平均值统计

news2024/11/15 9:00:36

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

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

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)

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1706151.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

群晖异地组网-节点小宝搭建使用指南(全平台异地组网)

内网穿透,对于经常传输小文件、远程控制NAS的朋友来说是够用了,但是对经常异地端到端大文件传输需求的朋友来说就差点事,有没有一种免费、速度快、配置简单得方式的呢,答案是有的。节点小宝异地组网是一个非常不错的方式&#xff…

表空间[MAIN]处于脱机状态

达梦数据库还原后&#xff0c;访问数据库报错&#xff1a;表空间[MAIN]处于脱机状态 解决方法&#xff1a; 1&#xff1a;检查备份文件 DMRMAN 中使用 CHECK 命令对备份集进行校验&#xff0c;校验备份集是否存在及合法。 ##语法&#xff1a;CHECK BACKUPSET <备份集目录…

大字体学生出勤记录系统网页HTML源码

源码介绍 上课需要一个个点名记录出勤情况&#xff0c;就借助AI制作了一个网页版学生出勤记录系统&#xff0c; 大字体显示学生姓名和照片&#xff0c;让坐在最后排学生也能看清楚&#xff0c;显示姓名同时会语音播报姓名&#xff0c; 操作很简单&#xff0c;先导入学生姓名…

信息抽取模型TPLinker

1.motivation 早期传统方法首先抽取实体再抽取它们之间的关系&#xff0c;但是忽略了两个任务之间的关联。而后期采取的联合模型都存在着一个严重问题&#xff1a;训练时&#xff0c;真实值作为上下文传入训练&#xff1b;推理时&#xff0c;模型自身生成的值作为上下文传入&a…

代码随想录算法训练营第21天|● 530.二叉搜索树的最小绝对差 ● 501.二叉搜索树中的众数 ● 236. 二叉树的最近公共祖先

二叉搜索树的最小绝对差 题目连接 https://leetcode.cn/problems/minimum-absolute-difference-in-bst/ 思路&#xff1a; 利用二叉搜索树的中序遍历的特性&#xff0c;将二叉树转成有序数组&#xff0c;进而求任意两个数的最小绝对差。 代码 /*** Definition for a bina…

邮箱调用接口的服务有哪些?怎么配置接口?

邮箱调用接口安全性如何保障&#xff1f;使用邮箱服务器的方法&#xff1f; 邮箱调用接口为各种应用和系统提供了便捷的电子邮件发送与接收功能。选择合适的邮箱调用接口服务可以大大提升工作效率和用户体验。本AokSend将探讨一些主要的邮箱调用接口服务。 邮箱调用接口&…

本杀小程序开发实战手册:从构思到上线

一、引言 随着移动互联网的快速发展&#xff0c;剧本杀作为一种新兴的娱乐方式&#xff0c;受到了越来越多年轻人的喜爱。为了满足市场需求&#xff0c;开发一款剧本杀小程序成为了许多创业者和开发者的选择。本文将从构思、设计、开发到上线等方面&#xff0c;为您详细解析剧…

庆余年2火了,却把热爱开源的程序员给坑了

庆余年 2 终于开播了&#xff0c;作为一名剧粉&#xff0c;苦等了五年终于盼来了。开播即爆火&#xff0c;虽然首播的几集剧情有些拖沓&#xff0c;不过也不影响这是一部好剧。 然而&#xff0c;庆余年 2 的爆火&#xff0c;却把 npmmirror 镜像站给坑惨了。npmmirror 镜像站&…

第一个Flutter3项目

配置flutter国内源 首先&#xff0c;配置flutter的国内源&#xff1a; env:PUB_HOSTED_URL"https://pub.flutter-io.cn"; env:FLUTTER_STORAGE_BASE_URL"https://storage.flutter-io.cn"配置gradle国内源 修改gradle\wrapper\gradle-wrapper.properties…

【MySQL数据库】:MySQL内置函数

目录 日期函数 current_date 函数 current_time 函数 current_timestamp 函数 now 函数 date 函数 date_add 函数 date_sub 函数 datediff 函数 字符串函数 charset 函数 concat 函数 instr 函数 ucase 函数 lcase 函数 left 函数 length 函数 replace…

vue3 手动简单 24h 甘特图封装

甘特图 手动封装简版甘特图&#xff0c;纯展示功能&#xff0c;无其他操作 文章目录 甘特图前言效果图组件使用总结 前言 开始的思路是使用echarts 瀑布图来体现&#xff0c;但是试验后发现&#xff0c;头部时间功能不满足&#xff0c;然未找到其他组件&#xff0c;于是手动封…

数据集008:吸烟、抽烟检测数据集(含数据集下载链接)

数据集简介 两个数据集 一个是783张图片对应的xml文件 一个是2482张图片对应的xml文件 如下图所示&#xff1a; 部分代码&#xff1a; # 测试数据读取 def test_data_loader(datadir, batch_size 10, test_image_size608, modetest):"""加载测试用的图片…

LangChain打造一个AI客服

最近在学习LangChain&#xff0c;langchain的第一个入门应用就是和ChatGPT结合形成的一个AI客服&#xff0c;本期文章就带大家一起认识下 LangChain LangChain是现在用得最多的AI框架&#xff0c;langchain在帮助如基于文档数据的回答、聊天机器人和代理这类的应用程序 langch…

2024年【N1叉车司机】免费试题及N1叉车司机试题及解析

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 N1叉车司机免费试题根据新N1叉车司机考试大纲要求&#xff0c;安全生产模拟考试一点通将N1叉车司机模拟考试试题进行汇编&#xff0c;组成一套N1叉车司机全真模拟考试试题&#xff0c;学员可通过N1叉车司机试题及解析…

OrangePi AIpro开发板,使用了310B,昇腾310B较于昇腾310有何性能提升?

OrangePi AIpro开发板 他们对应的模组分别是&#xff1a;Atlas 200 AI和Atlas 200I A2 310&#xff1a;基本规格 - Atlas 200 AI加速模块 用户指南 14 - 华为 (huawei.com) 310B&#xff1a;基本规格 - Atlas 200I A2 加速模块 用户指南 04 - 华为 (huawei.com)

Python爬虫实战(实战篇)—17获取【CSDN某一专栏】数据转为Markdown列表放入文章中

文章目录 专栏导读背景结果预览1、页面分析2、通过返回数据发现适合利用lxmlxpath3、进行Markdown语言拼接总结 专栏导读 在这里插入图片描述 &#x1f525;&#x1f525;本文已收录于《Python基础篇爬虫》 &#x1f251;&#x1f251;本专栏专门针对于有爬虫基础准备的一套基…

振弦式土压力计:功能优势与专业应用

振弦式土压力计&#xff0c;作为一种广泛应用于土木工程领域的测量仪器&#xff0c;具有多种功能优势&#xff0c;使得它成为了解被测结构物内部土压力变化的有效工具。下面我将详细介绍振弦式土压力计的功能优势及其在土木工程中的应用。 点击输入图片描述&#xff08;最多30字…

如何查询自己银行卡发卡银行归属地

一、引言 银行卡归属地是指银行卡的发卡银行所在的城市或地区。对于持卡人而言&#xff0c;了解银行卡的归属地不仅有助于管理个人账户&#xff0c;还能在需要时快速联系到发卡银行。本文将详细介绍如何查询银行卡的归属地。 二、查询方法 通过银行卡号查询 银行卡号中的前几…

工业触摸屏一般用哪种

工业触摸屏一般使用以下几种类型&#xff1a;1.电阻式触摸屏&#xff1a;电阻式触摸屏是最常见和常用的工业触摸屏类型之一。它由两层导电层组成&#xff0c;当屏幕上的物体接触到触摸屏时&#xff0c;两个导电层之间会发生电阻变化&#xff0c;触摸点的坐标信息可以通过测量电…

软件设计师中级 重点 笔记

文章目录 下午题目网络DNS域名解析分类&#xff1a;域名协议简介网络设备 算法软件工程实体联系图&#xff08;E-R图&#xff09; 其它 下午题目 数据流图补充原则 22年下半年真题 更早-真题大全 答题技巧 网络 DNS域名解析分类&#xff1a; 递归查询的顺序&#xff1a;1.本…