【发布时间】:2021-04-15 07:05:55
【问题描述】:
我正在尝试注释图像,这是我所做的注释中的one 边界框详细信息,
Original Image - 注释基于此文档图像。
# annotation
{'x': 267.9,
'y': 40.3,
'height': 116.7,
'width': 672.7,
'center': [604.25, 98.65],
'points': [[267.9, 40.3], [267.9, 157], [940.6, 157], [940.6, 40.3]]}
现在我还有另外五个小边界框,它们也是由我注释的,
[{'x': 290,
'y': 66,
'width': 309,
'height': 72,
'center': [444.5, 102.0],
'points': [[290.0, 66.0], [290.0, 138.0], [599.0, 138.0], [599.0, 66.0]]},
{'x': 626,
'y': 68,
'width': 295,
'height': 72,
'center': [773.5, 104.0],
'points': [[626.0, 68.0], [626.0, 140.0], [921.0, 140.0], [921.0, 68.0]]},
{'x': 960,
'y': 69,
'width': 20,
'height': 71,
'center': [970.0, 104.5],
'points': [[960.0, 69.0], [960.0, 140.0], [980.0, 140.0], [980.0, 69.0]]},
{'x': 1000,
'y': 72,
'width': 881,
'height': 72,
'center': [1440.5, 108.0],
'points': [[1000.0, 72.0], [1000.0, 144.0], [1881.0, 144.0], [1881.0, 72.0]]},
{'x': 1904,
'y': 73,
'width': 5,
'height': 71,
'center': [1906.5, 108.5],
'points': [[1904.0, 73.0], [1904.0, 144.0], [1909.0, 144.0], [1909.0, 73.0]]}
]
我正在寻找一种方法来找出上述 5 个边界框坐标中有多少重叠或进入我位于最顶部的第一个主边界框内。
我还需要一个选项来选择重叠的百分比以将其视为重叠。假设如果两个盒子有轻微的接触,我不想要它们。至少 10-15% 的 bbox 应该是内部的,以将其视为重叠或内部。
谁能帮我解决这个问题?
所需的输出:
在我的示例中,这两个较小的边界框位于主边界框内部或与主边界框重叠。
[{'x': 290,
'y': 66,
'width': 309,
'height': 72,
'center': [444.5, 102.0],
'points': [[290.0, 66.0], [290.0, 138.0], [599.0, 138.0], [599.0, 66.0]]},
{'x': 626,
'y': 68,
'width': 295,
'height': 72,
'center': [773.5, 104.0],
'points': [[626.0, 68.0], [626.0, 140.0], [921.0, 140.0], [921.0, 68.0]]}]
我用来从center points, width, height为边界框创建points的函数就是这个,
def convert_points(center_x, center_y, width, height):
x = center_x
y = center_y
return [[x - width / 2, y - height / 2], [x - width / 2, y + height / 2],
[x + width / 2, y + height / 2], [x + width / 2, y - height / 2]]
【问题讨论】:
-
在 C++ 中,您可以使用 opencv Rect 交集(&& 运算符)来测试它们是否重叠。也许还有一个python函数
-
@Micka 如果您遇到任何问题,您可以提供帮助的答案。
标签: python image opencv image-processing bounding-box