计算两个图形遮盖率

读取图像


首先,加载待处理的图像,可以使用图像处理库(例如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.mzph.cn/news/146857.shtml

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

相关文章

深度学习中文汉字识别 计算机竞赛

文章目录 0 前言1 数据集合2 网络构建3 模型训练4 模型性能评估5 文字预测6 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 深度学习中文汉字识别 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐&#xf…

快速搭建本地的chatgpt

快速搭建本地的chatgpt 参考:一篇文章教你使用Docker本地化部署Chatgpt(非api,速度非常快!!!)及裸连GPT的方式(告别镜像GPT)-CSDN博客 前提是linux下 已安装docker 命…

Leetcode—142.环形链表II【中等】

2023每日刷题(三十三) Leetcode—142.环形链表II 实现代码 /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/ struct ListNode *detectCycle(struct ListNode *head) {struct ListNode* …

2023.11.18 - hadoop之zookeeper分布式协调服务

1.zookeeper简介 ZooKeeper概念: Zookeeper是一个分布式协调服务的开源框架。本质上是一个分布式的小文件存储系统 ZooKeeper作用: 主要用来解决分布式集群中应用系统的一致性问题。 ZooKeeper结构: 采用树形层次结构,没有目录与文件之分,ZooKeeper树中的每个节点被…

阿里巴巴java开发手册-编程规约

编程规约 命名风格常量定义代码格式OOP 规约日期时间集合处理并发处理控制语句注释规约前后端规约其他 命名风格 【强制】代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束。 反例:_name / name / n a m e / n a m e / n a m e…

Linux下安装部署redis(离线模式)

一、准备工作 1.下载redis的安装包 下载地址:Index of /releases/ 大家可以自行选择redis的版本,笔者选择的是最新的 2.上传到服务器 前提是我先在服务器上创建了一个目录redis7.2.3,我直接上传到这个目录下 二、安装redis 1.解压redis t…

RIP路由信息协议

RIP路由信息协议(Routing Information Protocol) 最先得到广泛应用的协议,最大优点是简单要求网络中的每个路由器都要维护一张表,表中记录了从它自己到其他每一个目的网络的距离RIP是应用层协议,它在传输层使用UDP,RIP报文作为UD…

[Linux版本Debian系统]安装cuda 和对应的cudnn以cuda 12.0为例

写在前面 先检查自己有没有安装使用wget的命令,没有的话输入下面命令安装: apt-get install wget -y查看gcc的安装 sudo apt install gcc #安装gcc gcc --version #查看gcc是否安装成功 #若上述命令不成功使用下面的命令尝试之后再执行上面…

算法通关村第十关-白银挑战数组最大K数

大家好我是苏麟 , 今天带来一道应用快排的题 . 数组中的第K个最大元素 描述 : 给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。 请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。 题目 : Le…

ts学习02-数据类型

新建index.html <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title> </h…

OpenCV快速入门:绘制图形、图像金字塔和感兴趣区域

文章目录 前言一、绘制图形1. 绘制直线2. 绘制圆3. 绘制矩形4. 绘制椭圆5. 绘制多边形6. 绘制文字7. 可选参数8. 手工绘制OpenCV的logo 二、图像金字塔1. 高斯金字塔2. 拉普拉斯金字塔 三、感兴趣区域&#xff08;ROI&#xff09;数组切片方式OpenCV截取方式 总结 前言 OpenCV…

Docker与Kubernetes结合的难题与技术解决方案

文章目录 1. **版本兼容性**技术解决方案 2. **网络通信**技术解决方案 3. **存储卷的管理**技术解决方案 4. **安全性**技术解决方案 5. **监控和日志**技术解决方案 6. **扩展性与自动化**技术解决方案 7. **多集群管理**技术解决方案 结语 &#x1f388;个人主页&#xff1a…

Swagger(3):Swagger入门案例

1 编写SpringBoot项目 新建一个Rest请求控制器。 package com.example.demo.controller;import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.Reques…

深度学习(五)softmax 回归之:分类算法介绍,如何加载 Fashion-MINIST 数据集

Softmax 回归 基本原理 回归和分类&#xff0c;是两种深度学习常用方法。回归是对连续的预测&#xff08;比如我预测根据过去开奖列表下次双色球号&#xff09;&#xff0c;分类是预测离散的类别&#xff08;手写语音识别&#xff0c;图片识别&#xff09;。 现在我们已经对回…

Java多线程下使用TransactionTemplate控制事务

简介 本文展示了在Java的多线程环境下使用Spring的TransactionTemplate控制事务的提交与回滚&#xff0c;当任何一个子线程出现异常时&#xff0c;所有子线程都将回滚 环境 JDK&#xff1a;1.8.0_211 SpringBoot&#xff1a;2.5.10 说明 本文通过同时写入用户(User)和用户详细…

zookeperkafka学习

1、why kafka 优点 缺点kafka 吞吐量高&#xff0c;对批处理和异步处理做了大量的设计&#xff0c;因此Kafka可以得到非常高的性能。延迟也会高&#xff0c;不适合电商场景。RabbitMQ 如果有大量消息堆积在队列中&#xff0c;性能会急剧下降每秒处理几万到几十万的消息。如果…

记录一些涉及到界的题

文章目录 coppersmith的一些相关知识题1 [N1CTF 2023] e2Wrmup题2 [ACTF 2023] midRSA题3 [qsnctf 2023]浅记一下 coppersmith的一些相关知识 上界 X c e i l ( 1 2 ∗ N β 2 d − ϵ ) X ceil(\frac{1}{2} * N^{\frac{\beta^2}{d} - \epsilon}) Xceil(21​∗Ndβ2​−ϵ) …

【Proteus仿真】【STM32单片机】防火防盗GSM智能家居设计

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真STM32单片机控制器&#xff0c;使用声光报警模块、LCD1602显示模块、DS18B20温度、烟雾传感器模块、按键模块、PCF8591 ADC模块、红外检测模块等。 主要功能&#xff1a; 系统运行…

Mac电脑好用的窗口管理软件 Magnet 中文for mac

Magnet是一款用于Mac操作系统的窗口管理工具&#xff0c;它可以帮助您快速和方便地组织和管理应用程序窗口&#xff0c;以提高您的工作效率和多任务处理能力。 以下是Magnet的一些主要功能和特点&#xff1a; 窗口自动调整&#xff1a;Magnet允许您通过简单的拖放操作或使用快…

微信小程序 限制字数文本域框组件封装

微信小程序 限制字数文本域框 介绍&#xff1a;展示类组件 导入 在app.json或index.json中引入组件 "usingComponents": {"text-field":"/pages/components/text-field/index"}代码使用 <text-field maxlength"500" bindtabsIt…