在Python/OpenCV中判断矩形重叠面积是否超原矩形50%
嘿,我来帮你理清楚这个问题的实现思路,一步一步拆解下来其实很简单的!
矩形重叠面积判断完整实现步骤
1. 先算出原矩形的基础面积
原矩形给的坐标是(x1,y1)和(x2,y2),这里要注意x1不一定小于x2,y1也不一定小于y2,所以首先得先确定它的实际宽高:
- 宽度:
abs(x2 - x1) - 高度:
abs(y2 - y1) - 原面积:
width * height
如果原面积是0(比如是一条线或者一个点),那直接不用后续判断了,因为50%还是0,这种情况可以直接返回所有对比矩形都不满足条件。
2. 逐个处理待对比的矩形,计算重叠区域的边界
拿每个待对比的矩形(假设它的坐标是a1,b1,a2,b2)来说,重叠区域的四个边界是这么确定的:
- 重叠区域的左边界:
max(min(x1,x2), min(a1,a2))(取两个矩形左边界的最大值) - 重叠区域的右边界:
min(max(x1,x2), max(a1,a2))(取两个矩形右边界的最小值) - 重叠区域的下边界:
max(min(y1,y2), min(b1,b2))(取两个矩形下边界的最大值) - 重叠区域的上边界:
min(max(y1,y2), max(b1,b2))(取两个矩形上边界的最小值)
3. 判断是否存在有效重叠,并计算重叠面积
如果左边界 >= 右边界,或者下边界 >= 上边界,说明两个矩形完全不重叠,重叠面积就是0。
否则,重叠面积就是(右边界 - 左边界) * (上边界 - 下边界)
4. 对比重叠面积和原矩形面积的50%
先算出原面积的一半:original_area * 0.5
如果重叠面积大于这个一半的数值,就说明满足“重叠面积超过原矩形50%”的条件;反之则不满足。
附上Python代码示例,更直观
def check_overlap_percent(orig_x1, orig_y1, orig_x2, orig_y2, rectangles): # 计算原矩形的宽、高与面积 orig_width = abs(orig_x2 - orig_x1) orig_height = abs(orig_y2 - orig_y1) orig_area = orig_width * orig_height # 特殊情况:原矩形面积为0,直接返回全False if orig_area == 0: return [False] * len(rectangles) half_orig_area = orig_area * 0.5 results = [] for rect in rectangles: a1, b1, a2, b2 = rect # 计算重叠区域的四个边界 overlap_left = max(min(orig_x1, orig_x2), min(a1, a2)) overlap_right = min(max(orig_x1, orig_x2), max(a1, a2)) overlap_bottom = max(min(orig_y1, orig_y2), min(b1, b2)) overlap_top = min(max(orig_y1, orig_y2), max(b1, b2)) # 计算重叠面积 if overlap_left >= overlap_right or overlap_bottom >= overlap_top: overlap_area = 0 else: overlap_area = (overlap_right - overlap_left) * (overlap_top - overlap_bottom) # 判断是否超过50%,加入结果列表 results.append(overlap_area > half_orig_area) return results
这样每一步都很清晰,照着这个思路写代码就没问题啦~
内容的提问来源于stack exchange,提问作者Alexis
相关产品推荐
相关产品推荐

