当前位置: 首页 > article >正文

计算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.lryc.cn/news/2398428.html

相关文章:

  • 2024-2025-2-《移动机器人设计与实践》-复习资料-8……
  • 如何监测光伏系统中的电能质量问题?分布式光伏电能质量解决方案
  • 电子电路:全面深入了解晶振的定义、作用及应用
  • Day-15【选择与循环】选择结构-if语句
  • 定时器时钟来源可以从输入捕获引脚输入
  • SPL 轻量级多源混算实践 4 - 查询 MongoDB
  • 星敏感器:卫星姿态测量的“星空导航仪”
  • Cat.1与Cat.4区别及应用场景
  • 大宽带怎么做
  • Maestro CLI云端测试以及github cl,bitrise原生cl的测试流程
  • [内核开发手册] ARM汇编指令速查表
  • 25年宁德时代新能源科技SHL 测评语言理解数字推理Verify题库
  • AutoGenTestCase - 借助AI大模型生成测试用例
  • 区块链技术赋能供应链金融:重塑信任与效率
  • vue+cesium示例:3Dtiles三维模型高度调整(附源码下载)
  • 线程池RejectedExecutionException异常
  • lanqiaoOJ 1508:N皇后问题 ← dfs
  • 当 “欧洲版 Cursor” 遇上安全危机
  • [蓝桥杯]生物芯片
  • Spring Boot使用Redis实现分布式锁
  • 【如何在IntelliJ IDEA中新建Spring Boot项目(基于JDK 21 + Maven)】
  • (Python网络爬虫);抓取B站404页面小漫画
  • 【氮化镓】GaN HMETs器件物理失效分析进展
  • vb.net oledb-Access 数据库本身不支持命名参数,赋值必须和参数顺序一致才行
  • Abaqus连接器弹片正向力分析:
  • 鸿蒙生态再添翼:身份证银行卡识别引领智能识别技术新篇章
  • mybatis打印完整的SQL,p6spy
  • NLP学习路线图(十九):GloVe
  • 如何使用DAXStudio将PowerBI与Excel连接
  • 软考 系统架构设计师系列知识点之杂项集萃(79)