openCV中2个多边形的交叉区域

Ron*_*oss 8 c++ geometry opencv polygons

我有2个多边形的轮廓(作为cv :: Point2d的向量).

我想计算它们之间的交叉区域

获得它的最简单方法是什么?

非常感谢你!

罗恩

Lov*_*ill 10

CV_FILLED两个图像和AND 绘制形状.面积是: CountNonZero(bitwise_and(ShapeAImage,ShapeBImage)).


Boy*_*nov 3

最简单的编码方法如下:

cv::Rect BoundingBox;
int IntersectionArea = 0;
//insert Min-Max X,Y to create the BoundingBox

for (every y inside boundingbox)
     for (every x inside boundingbox)
         if (PointPolygonTest(x,y,Contour1) && PointPolygonTest(x,y,Contour2))
             IntersectionArea++;
Run Code Online (Sandbox Code Playgroud)

  • 这是准确的。边界框用作优化,以减少测试是否位于两个多边形内部的像素数量。从技术上讲,您可以执行图像中的每个“x”和每个“y”,并且会产生相同的结果。 (4认同)
  • 不幸的是,这对我没有帮助,因为我需要比使用边界框更准确...多边形可以是奇怪的形状(例如 L 形),而边界框无法处理这些情况。不管怎样,谢谢你! (2认同)
  • 这个解决方案会非常慢。 (2认同)