检测Matplotlib中任意旋转文本的交集

时间:2014-08-10 17:30:34

标签: python matplotlib intersection bounding-box

我想检测任意旋转的文本实例是否重叠。

使用描述的技术HERE我可以获得Text实例的轴对齐边界框(AABB)。如果文本是轴对齐的,那么AABB对于实际文本非常紧密。但是一旦你开始旋转文本,AABB覆盖的区域就会比文本占用的实际区域大得多:

Text Bboxes

因此,AABB不是检测旋转文本重叠的非常准确的方法。

这是我能想象到的方式:

  1. 对于每个文本实例 t ,使用AABB计算一组4个点,这些点定义紧密包含文本的任意方向的边界框(OBB) B_t 。 / LI>
  2. 通过两个步骤测试每个 t 相互交叉:
  3. 上述过程是一种好的方法,还是使用Matplotlib中已有的某些功能更好的方法?

1 个答案:

答案 0 :(得分:1)

如果你不想花很多时间思考这个并且不太关心性能,我会导入shapely并将边界框创建为多边形对象。然后找到重叠是微不足道的。

from shapely.geometry import Polygon
p1=Polygon([(0,0),(1,1),(1,0)])
p2=Polygon([(0,1),(1,0),(1,1)])
print p1.intersects(p2)

如果您可以在旋转文本之前创建多边形,甚至可以帮助找到OBB。 (只需确保对文本应用与多边形相同的变换。)