基于python 将图像上同一行距离相近的矩形框融合

article/2025/9/7 23:20:58
import os
import cv2
import numpy as npdef get_files(path):""" 获取指定路径下所有文件名称 """files = []for filename in os.listdir(path):if os.path.isfile(os.path.join(path, filename)):files.append(filename)return filesdef split_to_name_ext(image_name_ext):name, ext = os.path.splitext(image_name_ext)return name, extdef gen_empty_txt(txt_path):with open(txt_path, "w") as f:passdef calculate_center(rect):"""计算矩形的中心点"""return ((rect[0] + rect[2]) / 2, (rect[1] + rect[3]) / 2)def merge_rects(rect1, rect2):"""合并两个矩形"""return [min(rect1[0], rect2[0]), min(rect1[1], rect2[1]), max(rect1[2], rect2[2]), max(rect1[3], rect2[3])]def distance(x1, x2):"""计算两个中心点之间的距离"""return abs(x1-x2)def merge_close_rects(rects, threshold):"""合并距离相近的矩形""""""计算矩形的中心点"""# centers = [calculate_center(rect) for rect in rects]merged = []used = [False] * len(rects)print(used)for i in range(len(rects)):if not used[i]:#表示没有处理过的矩形框new_rect = rects[i]print(new_rect)for j in range(i + 1, len(rects)):compara_rect=rects[j]print('目前比对的矩形的坐标为',compara_rect)distance_x=distance(new_rect[0], compara_rect[0])distance_y=distance(new_rect[1], compara_rect[1])if (distance_x < threshold and distance_y<10):print('两个矩形框的距离为',distance_x)print('两个矩形框的距离为',distance_y)new_rect = merge_rects(new_rect, compara_rect)used[j] = Truemerged.append(new_rect)return mergedif __name__ == '__main__':small_box=[[712, 824, 718, 837], [621, 991, 629, 1005], [1531, 882, 1541, 896], [1583, 918, 1591, 929], [1553, 931, 1561, 946], [1601, 934, 1610, 948], [1600, 1033, 1608, 1048], [1518, 1079, 1525, 1094], [1547, 1164, 1553, 1177], [1604, 1164, 1610, 1177], [1608, 1162, 1616, 1177], [1620, 1164, 1626, 1177], [1535, 1180, 1541, 1193], [1595, 1197, 1601, 1210], [1603, 1195, 1610, 1210], [1537, 1212, 1545, 1226], [1543, 1211, 1550, 1226], [1604, 1212, 1612, 1226], [1522, 1346, 1528, 1359], [1543, 1476, 1552, 1491], [1623, 1479, 1631, 1491], [1308, 1513, 1317, 1527], [2176, 800, 2183, 815], [2181, 802, 2187, 815], [2203, 803, 2210, 818], [2201, 820, 2208, 831], [2096, 853, 2102, 864], [2106, 853, 2112, 864], [2127, 853, 2133, 864], [2162, 902, 2169, 914], [2175, 902, 2181, 914], [2193, 902, 2200, 914], [2212, 902, 2219, 914], [2179, 1018, 2187, 1029], [2187, 1018, 2203, 1029], [2186, 1034, 2201, 1046], [2199, 1034, 2219, 1046], [2161, 1081, 2168, 1095], [2189, 1308, 2197, 1323], [2205, 1307, 2211, 1320], [2208, 1308, 2216, 1320], [2148, 1371, 2156, 1386], [2178, 1374, 2185, 1386], [2204, 1374, 2211, 1385], [2208, 1374, 2216, 1386], [1995, 1404, 2002, 1419], [2009, 1404, 2020, 1422], [2022, 1407, 2031, 1418], [2079, 1404, 2086, 1419], [2086, 1404, 2093, 1418], [2089, 1422, 2095, 1435], [2136, 1457, 2147, 1471], [2149, 1457, 2160, 1471], [2162, 1457, 2170, 1468], [2066, 1473, 2081, 1484], [2129, 1473, 2140, 1485], [2138, 1473, 2146, 1484], [2155, 1473, 2172, 1485], [2178, 1473, 2185, 1485], [2183, 1473, 2194, 1485], [2088, 1506, 2096, 1520], [2117, 1506, 2124, 1518], [2148, 1506, 2155, 1518], [2158, 1506, 2171, 1520], [2174, 1506, 2181, 1517], [2188, 1506, 2195, 1518], [2197, 1506, 2205, 1517], [2142, 1523, 2159, 1534], [2161, 1523, 2168, 1534], [2168, 1523, 2176, 1536], [2174, 1523, 2181, 1534], [2196, 1523, 2203, 1534], [2201, 1523, 2216, 1534], [1985, 1539, 1992, 1554], [2027, 1539, 2033, 1551], [2051, 1539, 2059, 1551], [2060, 1539, 2068, 1551], [1981, 1552, 2005, 1567], [2005, 1554, 2011, 1567], [2008, 1556, 2024, 1567], [2022, 1556, 2038, 1570], [2035, 1556, 2043, 1567], [2040, 1554, 2046, 1567], [2049, 1556, 2055, 1567], [2067, 1553, 2074, 1567], [2071, 1556, 2095, 1567], [2113, 1569, 2127, 1584], [2151, 1572, 2168, 1584], [2165, 1571, 2171, 1584], [2169, 1572, 2176, 1584], [2176, 1572, 2184, 1583], [2182, 1572, 2189, 1584], [2187, 1572, 2203, 1584], [2203, 1572, 2216, 1584], [2033, 1587, 2039, 1600], [2121, 1605, 2129, 1617], [2136, 1605, 2143, 1616], [2146, 1602, 2156, 1617], [2159, 1605, 2166, 1616], [2169, 1605, 2180, 1620], [2183, 1605, 2189, 1617], [2194, 1605, 2201, 1616], [2198, 1605, 2206, 1617], [2205, 1605, 2216, 1620]]# 设置距离阈值threshold = 40  # 根据需要调整这个值# 合并矩形print("不一样的小区域的个数为",len(small_box))merged_rects = merge_close_rects(small_box, threshold)print(merged_rects)

绿色是小的矩形框,黄色是同一行融合后的矩形框。


http://www.hkcw.cn/article/PodMxqHdMM.shtml

相关文章

拉取gitlab项目

一、下载nvm管理node 先下载配置好nvm,再用nvm下载node 下载链接&#xff1a;开始 下载nvm - nvm中文官网 情况&#xff1a;npm i 下载依赖缓慢&#xff0c;可能是node版本不对&#xff0c;可能node版本太高 可能得问题&#xff1a;使用nvm 下载低版本的node时&#xff0c;…

Opencv4 c++ 自用笔记 01 Mat类

Mat类 Mat类用来保存矩阵类型的数据&#xff0c;包括向量、矩阵、灰度、通道数。主要分为两部分&#xff0c;矩阵头和矩阵指针。 &#xff08;单通道为灰度图像&#xff0c;3通道或4通道为彩色图像&#xff09; 矩阵头中包含矩阵形状、存储方法、地址、引用次数等。矩阵指针…

Linux `|` 管道符与 `grep` 命令深度解析与高阶应用指南

Linux `|` 管道符与 `grep` 命令深度解析与高阶应用指南 一、核心机制深度解析1. 管道符 `|` 的底层原理2. grep 的匹配引擎二、高阶组合应用技巧1. 多级过滤管道2. 实时监控与告警3. 结构化数据处理三、企业级应用场景1. 安全审计系统2. 性能监控告警3. 日志关联分析四、性能优…

STP配置

由于我们演示的是STP 但是华为交换机默认的都是MSTP所以要换到STP以下是方法 STP mode &#xff1f; 查看模式 STP mode stp 选择stp 换好了后配置交换机优先级 [SWA]stp priority 4096 Apr 15 2013 16:15:33-08:00 SWA DS/4/DATASYNC_CFGCHANGE:OID 1.3.6.1.4.1.2011.5…

CentOS_7.9 2U物理服务器上部署系统简易操作步骤

近期单位网站革新&#xff0c;鉴于安全加固&#xff0c;计划将原有Windows环境更新到Linux-CentOS 7.9&#xff0c;这版本也没的说&#xff08;绝&#xff09;了&#xff08;版&#xff09;官方停止更新&#xff0c;但无论如何还是被sisi的牵挂着这一大批人&#xff0c;毕竟从接…

《仿盒马》app开发技术分享-- 订单详情页(端云一体)

开发准备 在之前的章节中我们实现了订单的提交&#xff0c;以及提交之后跳转到确认订单页面&#xff0c;在确认订单页面我们添加了一个入口&#xff0c;这个入口是查询订单&#xff0c;当我们点击入口时&#xff0c;我们需要跳转到一个新的界面&#xff0c;这个界面通过接收上…

C# 控制台程序获取用户输入数据验证 不合规返回重新提示输入

在 C# 控制台程序中实现输入验证并循环重试&#xff0c;可以通过以下方式实现高效且用户友好的交互。以下是包含多种验证场景的完整解决方案&#xff1a; 一、通用输入验证框架 public static T GetValidInput<T>(string prompt, Func<string, (bool IsValid, T Val…

Linux:shell脚本常用命令

一、设置主机名称 1、查看主机名称 2、用文件的方式更改主机名称 重启后&#xff1a; 3、 通过命令修改主机名 重启后&#xff1a; 二、网络管理命令 1、查看网卡 2、设置网卡 &#xff08;1&#xff09;网卡未被设置过时 &#xff08;2&#xff09;当网卡被设定&#xff0c…

2025年渗透测试面试题总结-匿名[校招]安全研究员(SAST方向)(题目+回答)

安全领域各种资源&#xff0c;学习文档&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具&#xff0c;欢迎关注。 目录 匿名[校招]安全研究员(SAST方向) 一面问题回答框架 1. 自我介绍 2. 简历深挖&#xff08;漏洞挖掘&#x…

基于Java,SpringBoot,Vue,UniAPP医院预约挂号买药就诊病例微信小程序系统设计

摘要 随着医疗信息化的不断推进以及“互联网医疗”模式的广泛普及&#xff0c;传统医院挂号流程中存在的排队时间长、资源分配不均等问题日益凸显&#xff0c;急需通过数字化手段加以解决。本研究设计并实现了一套基于Java、SpringBoot、Vue与UniAPP技术栈的医院预约挂号微信小…

制作一款打飞机游戏62:添加音效

添加音乐 今天&#xff0c;我们要添加音乐。 首先&#xff0c;打开包含音轨的文件夹&#xff0c;然后使用文本编辑器打开cowshrub文件。接着&#xff0c;打开捐赠卡&#xff0c;复制其中的音乐和音效数据&#xff0c;粘贴到cowshrub文件中&#xff0c;替换原有的音效块&#…

WPF log4net用法

WPF log4net用法 一、在工程中管理NuGet程序包&#xff0c;找到log4net&#xff0c;点击安装&#xff0c;如下图已成功安装&#xff1b; 二、在工程中右键添加新建项&#xff0c;选择应用程序配置文件&#xff08;后缀为.config&#xff09;,然后设置名称&#xff0c;这里设置…

视频监控管理平台EasyCVR安防监控小知识:视频监控AI智能分析的常见部署方式有哪些?

一、方案背景​ 随着视频监控技术迭代&#xff0c;AI智能分析成为提升系统价值的核心。通过实时处理视频流辅助决策&#xff0c;广泛应用于智慧社区、园区等场景。由于AI算法部署方式多样且各有适用场景&#xff0c;因此合理选择部署方式是项目成功的关键。 二、主流AI算法部署…

5G RedCap是什么-与标准5G的区别及支持路由器推荐

技术背景与重要性 从智能穿戴到工业传感器&#xff0c;物联网设备种类繁多&#xff0c;但并非所有设备都需要标准5G的全部功能。为满足这些中端应用的需求&#xff0c;3GPP在Release 17中引入了5G RedCap&#xff08;Reduced Capability&#xff09;&#xff0c;也称为5G NR-L…

vmware虚拟机固定IP

vmware虚拟机固定IP vmware虚拟机端设置 vmware 设置nat模式 打开设置“网络和Internet”&#xff0c;点击“更改适配器选项”&#xff0c;点击适配器VMnet8&#xff0c;修改IP和DNS相关配置 虚拟机端设置 root用户登录虚拟机&#xff0c;输入命令&#xff1a; vi /et…

据传苹果将在WWDC上发布iOS 26 而不是iOS 19

苹果可能会对其操作系统的编号方式做出重大改变&#xff0c;基于年份的新版系统会将iOS 19重新命名为 iOS 26&#xff0c;同时 macOS 也会以同样的方式命名。 苹果的编号系统相当简单&#xff0c;版本号每年都会像钟表一样定期更新。然而&#xff0c;今年秋天情况可能有所不同&…

【深度剖析】义齿定制行业数字化转型模式创新研究(上篇2:痛点和难点分析)

数字化转型正在重塑义齿行业的生态格局,但也面临技术融合与模式变革的深层挑战。当前,义齿定制行业正处于从传统手工制造向全流程数字化制造转型的关键阶段。3D扫描、CAD/CAM(计算机辅助设计与制造)、3D打印等技术的广泛应用,显著提升了义齿制作的精度和效率。传统石膏模型…

英语学习5.29

主语 be动词 the first to do sth ✅ 例句解析&#xff1a; He was the first to arrive at the meeting. 他是第一个到会议现场的人。 Zhai Zhigang was the first Chinese astronaut to walk in space. 翟志刚是第一个进行太空行走的中国宇航员。 She is the first in h…

【从零开始学习QT】快捷键、帮助文档、Qt窗口坐标体系

目录 Qt Creator 中的快捷键 使用帮助文档 Qt 窗口坐标体系 QT专栏&#xff1a;QT_uyeonashi的博客-CSDN博客 Qt Creator 中的快捷键 • 注释&#xff1a;ctrl / • 运行&#xff1a;ctrl R • 编译&#xff1a;ctrl B • 字体缩放&#xff1a;ctrl 鼠标滑轮 • 查找&am…

docker网络相关内容详解

一、docker与k8s 一、Docker 核心解析 1. Docker 定义与架构 本质&#xff1a; 容器化平台&#xff08;构建容器化应用&#xff09;、进程管理软件&#xff08;守护进程管理容器生命周期&#xff09;。客户端&#xff08;docker cli&#xff09;与服务端&#xff08;docker ser…