繁体   English   中英

如何在Python中组合重叠矩形

[英]How to combine overlapping rectangles in Python

我在图像上绘制了各种重叠​​的矩形,如下所示:

在此输入图像描述

我想巩固这些矩形,以便只采取最外面的矩形。 例如,一个用于computer.org/webinars/Agile2矩形和一个用于FREE WEBINAR等的矩形。

我绘制矩形的方式是这样的:

import cv2
import numpy as np
.....
for rect in rects_new:
    #print (str(type(rect))) #<class 'numpy.ndarray'>
    #print (rect.area()) # gives error that 'numpy.ndarray' object has no attribute 'area'
    cv2.rectangle(vis, (rect[0],rect[1]), (rect[0]+rect[2],rect[1]+rect[3]), (0, 255, 255), 2)

我遇到了这个答案https://stackoverflow.com/a/24061475/44286和这个答案http://answers.opencv.org/question/67091/how-to-find-if-2-rectangles-are-overlapping -each-other /?answer = 67092#post-id-67092 ,表明opencv提供两个矩形与&交集。 但是,我无法在python中执行此操作。 当我调用area方法时,我收到一个错误(如上面的代码片段所示)。

如何合并矩形,以便在矩形重叠时,仅采用最外面的矩形。 我想通过使用OpenCVs提供的矩形交叉&功能在python中解决它。 如本文档中所述, http://docs.opencv.org/3.1.0/d2/d44/classcv_1_1Rect__.html#gsc.tab=0 ,并且在上面发布的链接答案中也提到了。

这可能有效:

def inOtherRect(rect_inner,rect_outer):
    return rect_inner[0]>=rect_outer[0] and \
        rect_inner[0]+rect_inner[2]<=rect_outer[0]+rect_outer[2] and \
        rect_inner[1]>=rect_outer[1] and \
        rect_inner[1]+rect_inner[3]<=rect_outer[1]+rect_outer[3] and \
        (rect_inner!=rect_outer)

outer_rects=[rects_new[:]]
for rect_inner in rects_new:
    for rect_outer in rects_new:
        if(inOtherRect(rect_inner,rect_outer)):
            if rect_inner in outer_rects:
                outer_rects.remove(rect_inner)


for rect in outer_rects:
    #print (str(type(rect))) #<class 'numpy.ndarray'>
    #print (rect.area()) # gives error that 'numpy.ndarray' object has no attribute 'area'
    cv2.rectangle(vis, (rect[0],rect[1]), (rect[0]+rect[2],rect[1]+rect[3]), (0, 255, 255), 2)

我遍历所有矩形并从复制列表中删除其他矩形内的那些矩形。

这样做是非常 inefficent和丑陋,但它应该工作(如果我猜你的坐标系右)。

注意:

这只会删除在另一个内部但不是部分重叠的矩形

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM