我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Python如何合并重叠矩形框

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Python如何合并重叠矩形框

小编给大家分享一下Python如何合并重叠矩形框,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!

需求:

  • NMS中的IOU相关,是选择一个最大或者可信度最高的框框保留。

  • 而我们现在试需要将重叠框框合并为一个大的框框,所以不能直接用上面的。

  • 并且OpenCVgroupRectangles在Python中我实在用不懂,而且它会把不重叠的框直接删了。。

原理:

  • 循环+递归,依次判断两个框是否有重叠。

效果:

Python如何合并重叠矩形框

参考代码:

import cv2import numpy as npdef checkOverlap(boxa, boxb):    x1, y1, w1, h2 = boxa    x2, y2, w2, h3 = boxb    if (x1 > x2 + w2):        return 0    if (y1 > y2 + h3):        return 0    if (x1 + w1 < x2):        return 0    if (y1 + h2 < y2):        return 0    colInt = abs(min(x1 + w1, x2 + w2) - max(x1, x2))    rowInt = abs(min(y1 + h2, y2 + h3) - max(y1, y2))    overlap_area = colInt * rowInt    area1 = w1 * h2    area2 = w2 * h3    return overlap_area / (area1 + area2 - overlap_area)def unionBox(a, b):    x = min(a[0], b[0])    y = min(a[1], b[1])    w = max(a[0] + a[2], b[0] + b[2]) - x    h = max(a[1] + a[3], b[1] + b[3]) - y    return [x, y, w, h]def intersectionBox(a, b):    x = max(a[0], b[0])    y = max(a[1], b[1])    w = min(a[0] + a[2], b[0] + b[2]) - x    h = min(a[1] + a[3], b[1] + b[3]) - y    if w < 0 or h < 0:        return ()    return [x, y, w, h]def rectMerge_sxf(rects: []):    # rects => [[x1, y1, w1, h2], [x2, y2, w2, h3], ...]    '''    当通过connectedComponentsWithStats找到rects坐标时,    注意前2個坐标是表示整個圖的,需要去除,不然就只有一個大框,    在执行此函数前,可执行类似下面的操作。    rectList = sorted(rectList)[2:]    '''    rectList = rects.copy()    rectList.sort()    new_array = []    complete = 1    # 要用while,不能forEach,因爲rectList內容會變    i = 0    while i < len(rectList):        # 選後面的即可,前面的已經判斷過了,不需要重復操作        j = i + 1        succees_once = 0        while j < len(rectList):            boxa = rectList[i]            boxb = rectList[j]            # 判斷是否有重疊,注意只針對水平+垂直情況,有角度旋轉的不行            if checkOverlap(boxa, boxb):  # intersectionBox(boxa, boxb)                complete = 0                # 將合並後的矩陣加入候選區                new_array.append(unionBox(boxa, boxb))                succees_once = 1                # 從原列表中刪除,因爲這兩個已經合並了,不刪除會導致重復計算                rectList.remove(boxa)                rectList.remove(boxb)                break            j += 1        if succees_once:            # 成功合並了一次,此時i不需要+1,因爲上面進行了remove(boxb)操作            continue        i += 1    # 剩餘項是不重疊的,直接加進來即可    new_array.extend(rectList)    # 0: 可能還有未合並的,遞歸調用;    # 1: 本次沒有合並項,說明全部是分開的,可以結束退出    if complete == 0:        complete, new_array = rectMerge_sxf(new_array)    return complete, new_arraybox = [[20, 20, 20, 20], [100, 100, 100, 100], [60, 60, 50, 50], [50, 50, 50, 50]]_, res = rectMerge_sxf(box)print(res)print(box)img = np.ones([256, 256, 3], np.uint8)for x,y,w,h in box:    img = cv2.rectangle(img, (x,y), (x+w,y+h), (0, 255, 0), 2)cv2.imshow('origin', img)img = np.ones([256, 256, 3], np.uint8)for x,y,w,h in res:    img = cv2.rectangle(img, (x,y), (x+w,y+h), (0, 0, 255), 2)cv2.imshow('after', img)cv2.waitKey(0)

看完了这篇文章,相信你对“Python如何合并重叠矩形框”有了一定的了解,如果想了解更多相关知识,欢迎关注编程网行业资讯频道,感谢各位的阅读!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Python如何合并重叠矩形框

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Python如何合并重叠矩形框

小编给大家分享一下Python如何合并重叠矩形框,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!需求:NMS中的IOU相关,是选择一个最大或者可信度最高的框框保留。而我们现在试需要将重叠框框合并为一个大的框框,所以不能直接用
2023-06-29

python如何利用cv2.rectangle()绘制矩形框

cv2.rectangle这个函数的作用是在图像上绘制一个简单的矩形,下面这篇文章主要给大家介绍了关于python如何利用cv2.rectangle()绘制矩形框的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
2022-12-23

python 如何将两个实数矩阵合并为一个复数矩阵

问题描述: 有时需要把两个实数矩阵,一个作为实部,一个作为虚部,合并为一个复数矩阵,该如何操作? 解决办法: 假如是在第二个维度上进行合并(real: Data[:, 0, :, :] imag: Data[:, 1, :, :]),有两种
2022-06-02

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录