计算A图片所有颜色占B图片红色区域的百分比

import cv2
import numpy as npdef calculate_overlap_percentage(a_image_path, b_image_path):# 读取A组和B组图像a_image = cv2.imread(a_image_path)b_image = cv2.imread(b_image_path)# 将图像从BGR转为HSV色彩空间,便于颜色筛选a_hsv = cv2.cvtColor(a_image, cv2.COLOR_BGR2HSV)b_hsv = cv2.cvtColor(b_image, cv2.COLOR_BGR2HSV)# 设置B组红色的HSV范围lower_red = np.array([0, 100, 100])upper_red = np.array([10, 255, 255])# 提取B组红色区域的掩膜b_red_mask = cv2.inRange(b_hsv, lower_red, upper_red)# 设置A组颜色区域的HSV范围(棕色和绿色)# 棕色的HSV范围lower_brown = np.array([10, 30, 30])upper_brown = np.array([25, 255, 200])# 绿色的HSV范围lower_green = np.array([35, 50, 50])upper_green = np.array([85, 255, 255])# 提取A组棕色和绿色区域的掩膜a_brown_mask = cv2.inRange(a_hsv, lower_brown, upper_brown)a_green_mask = cv2.inRange(a_hsv, lower_green, upper_green)# 合并A组的棕色和绿色区域掩膜a_color_mask = cv2.bitwise_or(a_brown_mask, a_green_mask)# 计算B组红色区域的像素数量b_red_area = cv2.countNonZero(b_red_mask)# 在A组中找到与B组红色区域重合的区域a_overlap = cv2.bitwise_and(a_color_mask, b_red_mask)# 计算A组与B组红色区域重合的像素数量a_overlap_area = cv2.countNonZero(a_overlap)# 计算A组有颜色区域占B组红色区域的百分比overlap_percentage = (a_overlap_area / b_red_area) * 100 if b_red_area != 0 else 0return overlap_percentage# 示例调用
a_image_path = "path_to_a_image.jpg"
b_image_path = "path_to_b_image.jpg"
percentage = calculate_overlap_percentage(a_image_path, b_image_path)
print(f"A组颜色区域占B组红色区域的百分比为: {percentage:.2f}%")

下面查看提取的mask是否正确

    # 调整显示图像的大小(设置为目标宽度 600 像素)height, width = b_red_mask.shapetarget_width = 600target_height = int(target_width * height / width)# 使用 cv2.resize 调整图像大小b_red_mask_resized = cv2.resize(b_red_mask, (target_width, target_height))# 显示调整后的B组红色掩膜cv2.imshow("B Red Mask", b_red_mask_resized)cv2.waitKey(0)  # 等待按键按下cv2.destroyAllWindows()  # 关闭所有窗口

 下面直接输出图片是户更方便

cv2.imwrite("a_color_mask.png", a_color_mask)

 

把a组与b组文件夹下的所有对应的图片进行计算,然后输出到一个txt文件 

import cv2
import numpy as np
import osdef calculate_overlap_percentage(a_image_path, b_image_path):# 读取A组和B组图像a_image = cv2.imread(a_image_path)b_image = cv2.imread(b_image_path)# 将图像从BGR转为HSV色彩空间,便于颜色筛选a_hsv = cv2.cvtColor(a_image, cv2.COLOR_BGR2HSV)b_hsv = cv2.cvtColor(b_image, cv2.COLOR_BGR2HSV)# 设置B组红色的HSV范围lower_red = np.array([0, 100, 100])upper_red = np.array([10, 255, 255])# 提取B组红色区域的掩膜b_red_mask = cv2.inRange(b_hsv, lower_red, upper_red)# 设置A组颜色区域的HSV范围(棕色和绿色)# 棕色的HSV范围lower_brown = np.array([10, 30, 30])upper_brown = np.array([25, 255, 200])# 绿色的HSV范围lower_green = np.array([35, 50, 50])upper_green = np.array([85, 255, 255])# 提取A组棕色和绿色区域的掩膜a_brown_mask = cv2.inRange(a_hsv, lower_brown, upper_brown)a_green_mask = cv2.inRange(a_hsv, lower_green, upper_green)# 合并A组的棕色和绿色区域掩膜a_color_mask = cv2.bitwise_or(a_brown_mask, a_green_mask)# 计算B组红色区域的像素数量b_red_area = cv2.countNonZero(b_red_mask)# 在A组中找到与B组红色区域重合的区域a_overlap = cv2.bitwise_and(a_color_mask, b_red_mask)# 计算A组与B组红色区域重合的像素数量a_overlap_area = cv2.countNonZero(a_overlap)# 计算A组有颜色区域占B组红色区域的百分比overlap_percentage = (a_overlap_area / b_red_area) * 100 if b_red_area != 0 else 0return overlap_percentagedef process_images(a_folder, b_folder, output_file):# 获取文件夹中的所有文件a_files = sorted(os.listdir(a_folder))b_files = sorted(os.listdir(b_folder))# 打开输出文件with open(output_file, 'w') as f:# 遍历文件夹中的每一对图片for a_file, b_file in zip(a_files, b_files):# 拼接完整的文件路径a_image_path = os.path.join(a_folder, a_file)b_image_path = os.path.join(b_folder, b_file)# 确保文件是图片文件if not a_file.endswith(('.jpg', '.png', '.jpeg')) or not b_file.endswith(('.jpg', '.png', '.jpeg')):continue# 计算重叠百分比percentage = calculate_overlap_percentage(a_image_path, b_image_path)# 写入结果到txt文件f.write(f'{a_file} vs {b_file}: {percentage:.2f}%\n')print(f'{a_file} vs {b_file}: {percentage:.2f}%')# 文件夹路径
a_folder = 'path_to_a_folder'  # A组文件夹路径
b_folder = 'path_to_b_folder'  # B组文件夹路径
output_file = 'overlap_results.txt'  # 输出的txt文件路径# 处理文件夹中的所有图片并输出到txt文件
process_images(a_folder, b_folder, output_file)

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

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

相关文章

每日算法 -【Swift 算法】盛最多水的容器

盛最多水的容器:Swift 解法与思路分析 📌 问题描述 给定一个长度为 n 的整数数组 height,每个元素表示在横坐标 i 处的一条垂直线段的高度。任意两条线段和 x 轴构成一个容器,该容器可以装水,水量的大小由较短的那条…

云原生安全基础:Linux 文件权限管理详解

🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 在云原生环境中,Linux 文件权限管理是保障系统安全的核心技能之一。无论是容器化应用、微服务架构还是基础设施即代码(IaC&#xf…

TypeScript 中的字面量类型(Literal Types)

在 TypeScript 中,字面量类型(Literal Types)是一种特殊的类型,它允许你将变量的类型限制为某个具体的值(如特定的字符串、数字或布尔值),而不仅仅是宽泛的类型(如 string、number&a…

晶台光耦在手机PD快充上的应用

光耦(光电隔离器)作为关键电子元件,在手机PD快充中扮演信号隔离与传输的“安全卫士”。其通过光信号实现电气隔离,保护手机电路免受高电压损害,同时支持实时信号反馈,优化充电效率。 晶台品牌推出KL817、KL…

python学习打卡day43

DAY 43 复习日 作业: kaggle找到一个图像数据集,用cnn网络进行训练并且用grad-cam做可视化 浙大疏锦行 数据集使用猫狗数据集,训练集中包含猫图像4000张、狗图像4005张。测试集包含猫图像1012张,狗图像1013张。以下是数据集的下…

大数据与数据分析【数据分析全栈攻略:爬虫+处理+可视化+报告】

- 第 100 篇 - Date: 2025 - 05 - 25 Author: 郑龙浩/仟墨 大数据与数据分析 文章目录 大数据与数据分析一 大数据是什么?1 定义2 大数据的来源3 大数据4个方面的典型特征(4V)4 大数据的应用领域5 数据分析工具6 数据是五种生产要素之一 二 …

uniapp 开发企业微信小程序,如何区别生产环境和测试环境?来处理不同的服务请求

在 uniapp 开发企业微信小程序时,区分生产环境和测试环境是常见需求。以下是几种可靠的方法,帮助你根据环境处理不同的服务请求: 一、通过条件编译区分(推荐) 使用 uniapp 的 条件编译 语法,在代码中标记…

青少年编程与数学 02-020 C#程序设计基础 15课题、异常处理

青少年编程与数学 02-020 C#程序设计基础 15课题、异常处理 一、异常1. 异常的分类2. 异常的作用小结 二、异常处理1. 异常处理的定义2. 异常处理的主要组成部分3. 异常处理的作用小结 三、C#异常处理1. 异常的基本概念2. 异常处理的关键字3. 异常处理的流程4. 自定义异常5. 异…

云原生时代 Kafka 深度实践:05性能调优与场景实战

5.1 性能调优全攻略 Producer调优 批量发送与延迟发送 通过调整batch.size和linger.ms参数提升吞吐量: props.put(ProducerConfig.BATCH_SIZE_CONFIG, 16384); // 默认16KB props.put(ProducerConfig.LINGER_MS_CONFIG, 10); // 等待10ms以积累更多消息ba…

在 Dify 项目中的 Celery:异步任务的实现与集成

Celery 是一个强大而灵活的分布式任务队列系统,旨在帮助应用程序在后台异步运行耗时的任务,提高系统的响应速度和性能。在 Dify 项目中,Celery 被广泛用于处理异步任务和定时任务,并与其他工具(如 Sentry、OpenTelemet…

Pytorch Geometric官方例程pytorch_geometric/examples/link_pred.py环境安装教程及图数据集制作

最近需要训练图卷积神经网络(Graph Convolution Neural Network, GCNN),在配置GCNN环境上总结了一些经验。 我觉得对于初学者而言,图神经网络的训练会有2个难点: ①环境配置 ②数据集制作 一、环境配置 我最初光想…

2025年微信小程序开发:AR/VR与电商的最新案例

引言 微信小程序自2017年推出以来,已成为中国移动互联网生态的核心组成部分。根据最新数据,截至2025年,微信小程序的日活跃用户超过4.5亿,总数超过430万,覆盖电商、社交、线下服务等多个领域(WeChat Mini …

互联网向左,区块链向右

2008年,中本聪首次提出了比特币的设想,这打开了去中心化的大门。 比特币白皮书清晰的描述了去中心化支付的解决方案,并分别从以下几个方面阐述了他的理念: 一、由转账双方点对点的通讯,而不通过中心化的第三方&#xf…

PV操作的C++代码示例讲解

文章目录 一、PV操作基本概念(一)信号量(二)P操作(三)V操作 二、PV操作的意义三、C中实现PV操作的方法(一)使用信号量实现PV操作代码解释: (二)使…

《对象创建的秘密:Java 内存布局、逃逸分析与 TLAB 优化详解》

大家好呀!今天我们来聊聊Java世界里那些"看不见摸不着"但又超级重要的东西——对象在内存里是怎么"住"的,以及JVM这个"超级管家"是怎么帮我们优化管理的。放心,我会用最接地气的方式讲解,保证连小学…

简单实现Ajax基础应用

Ajax不是一种技术,而是一个编程概念。HTML 和 CSS 可以组合使用来标记和设置信息样式。JavaScript 可以修改网页以动态显示,并允许用户与新信息进行交互。内置的 XMLHttpRequest 对象用于在网页上执行 Ajax,允许网站将内容加载到屏幕上而无需…

详解开漏输出和推挽输出

开漏输出和推挽输出 以上是 GPIO 配置为输出时的内部示意图,我们要关注的其实就是这两个 MOS 管的开关状态,可以组合出四种状态: 两个 MOS 管都关闭时,输出处于一个浮空状态,此时他对其他点的电阻是无穷大的&#xff…

Matlab实现LSTM-SVM回归预测,作者:机器学习之心

Matlab实现LSTM-SVM回归预测,作者:机器学习之心 目录 Matlab实现LSTM-SVM回归预测,作者:机器学习之心效果一览基本介绍程序设计参考资料 效果一览 基本介绍 代码主要功能 该代码实现了一个LSTM-SVM回归预测模型,核心流…

Leetcode - 周赛 452

目录 一,3566. 等积子集的划分方案二,3567. 子矩阵的最小绝对差三,3568. 清理教室的最少移动四,3569. 分割数组后不同质数的最大数目 一,3566. 等积子集的划分方案 题目列表 本题有两种做法,dfs 选或不选…

【FAQ】HarmonyOS SDK 闭源开放能力 —Account Kit(5)

1.问题描述: 集成华为一键登录的LoginWithHuaweiIDButton, 但是Button默认名字叫 “华为账号一键登录”,太长无法显示,能否简写成“一键登录”与其他端一致? 解决方案: 问题分两个场景: 一、…