计算两个图形遮盖率

读取图像


首先,加载待处理的图像,可以使用图像处理库(例如OpenCV)来实现这一步。确保已加载正确的图像。

定义特定颜色范围


确定所需的特定颜色范围。这将是要检测的马赛克填充的颜色。需要指定颜色的下限值和上限值,通常以BGR(蓝-绿-红)或HSV(色相-饱和度-明度)颜色空间表示。

转换颜色空间


将图像从BGR颜色空间转换为HSV颜色空间。这是因为在HSV颜色空间中更容易定义颜色范围。

创建颜色掩模

使用颜色的下限值和上限值在HSV图像中创建一个掩模,该掩模会高亮符合颜色范围的区域。掩模是一个二值图像,其中颜色范围内的像素为白色,其他像素为黑色。

寻找颜色区域的轮廓

在掩模图像中,使用图像处理技术(例如轮廓检测)来查找颜色区域的轮廓。每个轮廓代表一个特定颜色的填充矩形。

排除小矩形


在上述步骤中,会得到所有颜色填充区域的轮廓。然后,根据要求排除太小的矩形。可以通过设定一个阈值来过滤掉宽度或高度小于该阈值的矩形。

计算遮罩与标记的交集

对于筛选后的矩形,需要将它们与标记进行比较,以计算遮罩与标记的交集。这包括以下步骤:
获取矩形的坐标和尺寸。
获取标记的坐标和尺寸。

计算遮盖率


计算交集区域的面积并除以标记区域的面积,以获得遮盖率。

分类漏检、误检和正检
每一个标记需指定对应的马赛克,误检、漏检、正检分类规则如下:
无马赛克指定的标记判定为马赛克漏检,遮盖率为0%;
有马赛克但无对应标记的判定为马赛克误检,不计算遮盖率;
有马赛克且有对应标记的判定为马赛克正检,遮盖率为[0%,100%]。

实现代码

#!/anaconda3/envs/FEALPy/bin python3.7
# -*- coding: utf-8 -*-
# ---
# @Software: PyCharm
# @File: get_mosaic.py
# @Author: jerry
# @E-mail: zj850324@yeah.net
# @Site: 
# @Time: 10月 13, 2023
# ---
# 计算遮盖率
# ---
import cv2
import numpy as npdef calculate_intersection(mask1, mask2):# 计算两个掩膜的交集return cv2.bitwise_and(mask1, mask2)def extract_and_draw_mosaics(image_path, min_mosaic_size=10, max_display_width=1600, target_color=(181, 230, 29)):# 读取图像image = cv2.imread(image_path)# 计算缩放比例width, height = image.shape[1], image.shape[0]scale = max_display_width / width if width > max_display_width else 1.0new_width = int(width * scale)new_height = int(height * scale)# 缩小图像small_image = cv2.resize(image, (new_width, new_height))# 定义目标颜色的阈值范围lower_color = np.array([target_color[2] - 1, target_color[1] - 1, target_color[0] - 1])upper_color = np.array([target_color[2] + 1, target_color[1] + 1, target_color[0] + 1])# 使用阈值操作找到目标颜色填充的区域mask = cv2.inRange(small_image, lower_color, upper_color)# 查找轮廓contours, _ = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)# 提取满足最小尺寸要求的马赛克并画在图像上for contour in contours:x, y, w, h = cv2.boundingRect(contour)if w >= min_mosaic_size and h >= min_mosaic_size:# 创建一个与提取的矩形相同大小的maskmosaic_mask = np.zeros_like(mask)# 计算差异,假设宽度差异为dw,高度差异为dhdw, dh = 5, 10x_offset, y_offset = 5, 5mosaic_mask[y + y_offset:y + h + y_offset + dh, x + x_offset:x + w + x_offset + dw] = 1# 计算交集intersection = np.logical_and(mosaic_mask, mask)# 计算遮盖率mosaic_area = mosaic_mask.sum()intersection_area = intersection.sum()coverage = intersection_area / float(mosaic_area)# 画提取的矩形(绿色边框)cv2.rectangle(small_image, (x, y), (x + w, y + h), (0, 255, 0), 2)# 画创建的矩形(红色边框)cv2.rectangle(small_image, (x + x_offset, y + y_offset), (x + x_offset + w + dw, y + y_offset + h + dh),(0, 0, 255), 2)print(f"提取的矩形位置:(x: {x}, y: {y}), 宽度: {w}, 高度: {h}")print(f"创建的矩形位置:(x: {x + x_offset}, y: {y + y_offset}), 宽度: {w + dw}, 高度: {h + dh}")print(f"遮盖率:{coverage:.2f}")# 显示图像cv2.imshow('Image with Mosaics', small_image)cv2.waitKey(0)cv2.destroyAllWindows()# 使用示例
image_path = './images/1.png'  # 图像路径
min_mosaic_size = 10  # 定义最小马赛克大小
max_display_width = 1600  # 定义最大显示宽度
target_color = (181, 230, 29)  # 定义目标颜色extract_and_draw_mosaics(image_path, min_mosaic_size, max_display_width, target_color)

实现效果

 

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

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

相关文章

系列一、GC概述 作用域

一、概述 GC是垃圾回收的意思。次数上频繁收集Young区,少收集Old区,基本不动元空间。 二、作用域 GC的作用域是方法区和堆,主要针对于堆。

性能测试之性能监控详解

性能监控 性能监控是指通过收集、分析和报告关键性能指标,实时监测系统、应用程序或网络的性能和健康状况。通过性能监控,您可以及时发现潜在的性能问题,识别系统瓶颈,并进行性能优化。【点击文末小卡片免费领取测试资料】 以下…

内网信息收集-网络安全

目录 本机信息收集 查看系统配置信息 查看系统服务信息 查看系统登录信息 自动信息收集 域内信息收集 判断是否存在域 探测域内存主机&端口 powershell arp扫描 小工具 telnet 查看用户&机器&会话相关信息 查看机器相关信息 查看用户相关信息 本机信…

三江城115m²3室2厅2卫,现代简约不单是居所更是对生活的向往。福州中宅装饰,福州装修

【前言】 简洁有力,静默无声。 以简约精致的方式,展现现代都市生活; 经典不因潮流褪色,不为悦人只为悦己。 项目信息 项目名称 | 三江城 设计地址 | 福建福州 项目面积 | 115㎡ 项目户型 | 3室2厅 设计风格 | 现代简约 全…

对分过层后的类进行可视化

变量是&#xff1a; std::vector<pcl::PointCloud<pcl::PointXYZRGB>::Ptr> clusters_k_upper std::vector<pcl::PointCloud<pcl::PointXYZRGB>::Ptr> clusters_k_lower std::vector<pcl::PointCloud<pcl::PointXYZRGB>::Ptr> clusters_un…

FindMy技术用于保温杯

在即将到来的冬季&#xff0c;每个人都开始给自己准备一个保温杯&#xff0c;保温杯是一种盛水的容器&#xff0c;主要由陶瓷或不锈钢制成&#xff0c;并加入真空层&#xff0c;以实现保温效果。这种杯子顶部有盖&#xff0c;密封严实&#xff0c;能够延缓内部液体散热&#xf…

影像仪全景导航,快速定位产品特征!

**在工业制造领域中&#xff0c;影像仪全景导航可以提供全景影像&#xff0c;将整个区域的图像精准地捕捉下来&#xff0c;并通过软件算法实现高效处理&#xff0c;以呈现出更加清晰和详细的视图。**这一技术不仅可以提高定位精度&#xff0c;同时还能大幅度提升定位效率。与自…

武汉凯迪正大—变频互感器特性测试仪

互感器综合测试仪主要特点 仅需进行简单的数字设定&#xff1a;设定互感器的额定参数。仪器将全过程自动记录数据&#xff0c;并自动将变比极性、伏安特性曲线等计算并显示出来&#xff0c;省去换线、手动调压、人工记录、整理、描曲线等烦琐劳动。 现场检定电流互感器无需标…

智慧物流追踪:打造未来的物流网络

随着互联网和物流行业的深度融合&#xff0c;智慧物流已成为现代物流发展的新趋势。通过开发一款智能化的物流追踪app小程序&#xff0c;我们不仅可以提高物流效率&#xff0c;还可以为客户提供更加便捷的服务。本文将从市场需求、技术应用、竞争优势、行业前景等方面对智慧物流…

PG数据库实现merge into方法

语法格式1&#xff1a;有则更新&#xff0c;无则插入 insert into table_1(column_1,column_2, column_3) select column_1,column_2,column_3,from table_2on conflict (column_1)do update setcolumn_2 excluded.column_2,column_3 excluded.column_3如&#xff1a; inse…

【Java 进阶篇】深入浅出:JQuery 事件绑定的奇妙世界

在前端的世界里&#xff0c;事件是不可或缺的一部分。用户的点击、输入、滚动等行为都触发着各种事件&#xff0c;而如何在代码中捕捉并处理这些事件是每位前端开发者必须掌握的技能之一。本文将带你深入浅出&#xff0c;探索 JQuery 中的事件绑定&#xff0c;为你揭开这个奇妙…

SmartX 超融合 5.1 版本有哪些新特性和技术提升?

近日&#xff0c;SmartX 正式发布了超融合产品组合 SmartX HCI 5.1 版本&#xff0c;以全面升级的超融合软件、分布式块存储、容器管理与服务、软件定义的网络与安全等组件&#xff0c;为虚拟化和容器负载在计算、存储、网络和管理层面提供统一的架构和生产级别的能力支持。本期…