最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python合并重疊矩形框

 更新時(shí)間:2022年03月17日 11:58:22   作者:songxf  
這篇文章主要介紹了Python合并重疊矩形框,循環(huán)+遞歸,依次判斷兩個(gè)框是否有重疊,下面具體實(shí)現(xiàn)過(guò)程需要的小伙伴可以參考一下

需求:

  • NMS中的IOU相關(guān),是選擇一個(gè)最大或者可信度最高的框框保留。
  • 而我們現(xiàn)在試需要將重疊框框合并為一個(gè)大的框框,所以不能直接用上面的。
  • 并且OpenCVgroupRectangles在Python中我實(shí)在用不懂,而且它會(huì)把不重疊的框直接刪了。。

原理:

  • 循環(huán)+遞歸,依次判斷兩個(gè)框是否有重疊。

效果:

參考代碼:

import cv2
import numpy as np


def checkOverlap(boxa, boxb):
? ? x1, y1, w1, h1 = boxa
? ? x2, y2, w2, h2 = boxb
? ? if (x1 > x2 + w2):
? ? ? ? return 0
? ? if (y1 > y2 + h2):
? ? ? ? return 0
? ? if (x1 + w1 < x2):
? ? ? ? return 0
? ? if (y1 + h1 < y2):
? ? ? ? return 0
? ? colInt = abs(min(x1 + w1, x2 + w2) - max(x1, x2))
? ? rowInt = abs(min(y1 + h1, y2 + h2) - max(y1, y2))
? ? overlap_area = colInt * rowInt
? ? area1 = w1 * h1
? ? area2 = w2 * h2
? ? 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, h1], [x2, y2, w2, h2], ...]
? ? '''
? ? 當(dāng)通過(guò)connectedComponentsWithStats找到rects坐標(biāo)時(shí),
? ? 注意前2個(gè)坐標(biāo)是表示整個(gè)圖的,需要去除,不然就只有一個(gè)大框,
? ? 在執(zhí)行此函數(shù)前,可執(zhí)行類似下面的操作。
? ? rectList = sorted(rectList)[2:]
? ? '''
? ? rectList = rects.copy()
? ? rectList.sort()
? ? new_array = []
? ? complete = 1
? ? # 要用while,不能forEach,因爲(wèi)rectList內(nèi)容會(huì)變
? ? i = 0
? ? while i < len(rectList):
? ? ? ? # 選後面的即可,前面的已經(jīng)判斷過(guò)了,不需要重復(fù)操作
? ? ? ? j = i + 1
? ? ? ? succees_once = 0
? ? ? ? while j < len(rectList):
? ? ? ? ? ? boxa = rectList[i]
? ? ? ? ? ? boxb = rectList[j]
? ? ? ? ? ? # 判斷是否有重疊,注意只針對(duì)水平+垂直情況,有角度旋轉(zhuǎn)的不行
? ? ? ? ? ? if checkOverlap(boxa, boxb): ?# intersectionBox(boxa, boxb)
? ? ? ? ? ? ? ? complete = 0
? ? ? ? ? ? ? ? # 將合並後的矩陣加入候選區(qū)
? ? ? ? ? ? ? ? new_array.append(unionBox(boxa, boxb))
? ? ? ? ? ? ? ? succees_once = 1
? ? ? ? ? ? ? ? # 從原列表中刪除,因爲(wèi)這兩個(gè)已經(jīng)合並了,不刪除會(huì)導(dǎo)致重復(fù)計(jì)算
? ? ? ? ? ? ? ? rectList.remove(boxa)
? ? ? ? ? ? ? ? rectList.remove(boxb)
? ? ? ? ? ? ? ? break
? ? ? ? ? ? j += 1
? ? ? ? if succees_once:
? ? ? ? ? ? # 成功合並了一次,此時(shí)i不需要+1,因爲(wèi)上面進(jìn)行了remove(boxb)操作
? ? ? ? ? ? continue
? ? ? ? i += 1
? ? # 剩餘項(xiàng)是不重疊的,直接加進(jìn)來(lái)即可
? ? new_array.extend(rectList)

? ? # 0: 可能還有未合並的,遞歸調(diào)用;
? ? # 1: 本次沒(méi)有合並項(xiàng),說(shuō)明全部是分開的,可以結(jié)束退出
? ? if complete == 0:
? ? ? ? complete, new_array = rectMerge_sxf(new_array)
? ? return complete, new_array


box = [[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)

到此這篇關(guān)于Python合并重疊矩形框的文章就介紹到這了,更多相關(guān)Python合并矩形框內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python使用Pandas讀寫Excel實(shí)例解析

    Python使用Pandas讀寫Excel實(shí)例解析

    這篇文章主要介紹了Python使用Pandas讀寫Excel實(shí)例解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • Python爬蟲框架Scrapy實(shí)例代碼

    Python爬蟲框架Scrapy實(shí)例代碼

    這篇文章主要介紹了Python爬蟲框架Scrapy實(shí)例代碼,需要的朋友可以參考下
    2018-03-03
  • 在PyCharm中實(shí)現(xiàn)添加快捷模塊

    在PyCharm中實(shí)現(xiàn)添加快捷模塊

    今天小編就為大家分享一篇在PyCharm中實(shí)現(xiàn)添加快捷模塊,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-02-02
  • python中pandas常用命令詳解

    python中pandas常用命令詳解

    pandas 是基于NumPy 的一種工具,該工具是為了解決數(shù)據(jù)分析任務(wù)而創(chuàng)建的,這篇文章主要介紹了python中pandas常用命令,需要的朋友可以參考下
    2022-07-07
  • Pytorch十九種損失函數(shù)的使用詳解

    Pytorch十九種損失函數(shù)的使用詳解

    這篇文章主要介紹了Pytorch十九種損失函數(shù)的使用詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • Pytest 自動(dòng)化測(cè)試框架的使用

    Pytest 自動(dòng)化測(cè)試框架的使用

    本文主要介紹了Pytest 自動(dòng)化測(cè)試框架的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • 使用python遠(yuǎn)程操作linux過(guò)程解析

    使用python遠(yuǎn)程操作linux過(guò)程解析

    這篇文章主要介紹了使用python遠(yuǎn)程操作linux過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12
  • Pygame實(shí)現(xiàn)簡(jiǎn)易版趣味小游戲之反彈球

    Pygame實(shí)現(xiàn)簡(jiǎn)易版趣味小游戲之反彈球

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)簡(jiǎn)易版趣味反彈球游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • Python3安裝與環(huán)境配置的超完整教程

    Python3安裝與環(huán)境配置的超完整教程

    這篇文章主要介紹了在Windows系統(tǒng)中安裝和配置Python3,包括下載、安裝、環(huán)境變量配置、驗(yàn)證安裝、安裝常用工具和庫(kù)以及解決常見問(wèn)題,需要的朋友可以參考下
    2025-02-02
  • 面向?qū)ο髮W(xué)習(xí)之pygame坦克大戰(zhàn)

    面向?qū)ο髮W(xué)習(xí)之pygame坦克大戰(zhàn)

    這篇文章主要為大家詳細(xì)介紹了面向?qū)ο髮W(xué)習(xí)之pygame坦克大戰(zhàn),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-09-09

最新評(píng)論

吉安县| 夹江县| 苍梧县| 海晏县| 南宁市| 瑞丽市| 广平县| 团风县| 石阡县| 泸水县| 汉中市| 仁布县| 游戏| 五家渠市| 页游| 略阳县| 勐海县| 上林县| 莲花县| 阿拉善右旗| 长兴县| 宝坻区| 噶尔县| 彭泽县| 广西| 平罗县| 南召县| 恭城| 夹江县| 仙居县| 深州市| 长白| 桂阳县| 河北区| 六枝特区| 巴塘县| 景德镇市| 虹口区| 北碚区| 保定市| 明光市|