【问题标题】:Intersection area of 2 polygons in openCVopenCV中2个多边形的交集面积
【发布时间】:2013-07-22 13:14:41
【问题描述】:

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

我想计算它们之间的相交面积

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

非常感谢!

罗恩

【问题讨论】:

    标签: c++ opencv geometry polygons


    【解决方案1】:

    最简单的编码方法如下:

    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++;
    

    【讨论】:

    • 不幸的是,这对我没有帮助,因为我需要比使用边界框更准确...多边形可以是奇怪的形状(例如 L 形),而边界框可以t 处理这些案件。谢谢你!
    • 它是准确的。边界框被用作优化以减少被测试在两个多边形内的像素数量。从技术上讲,您可以对图像中的每个“x”和每个“y”进行处理,并且会产生相同的结果。
    • 这个解决方案会很慢。
    【解决方案2】:

    你可以找到与Clipper library相交的多边形

    //create clipper polygons from your points
    c.AddPolygons(subj, ptSubject);
    c.AddPolygons(clip, ptClip);
    c.Execute(ctIntersection, solution, pftNonZero, pftNonZero);
    

    然后calc area of this polygon

    【讨论】:

      【解决方案3】:

      在两个图像中用CV_FILLED 绘制形状,然后对它们进行AND。区域为:CountNonZero(bitwise_and(ShapeAImage,ShapeBImage))

      【讨论】:

        猜你喜欢
        • 2015-04-23
        • 1970-01-01
        • 2021-03-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-05-23
        • 2012-01-26
        相关资源
        最近更新 更多