2013-07-23 84 views

回答

2

代码最简单的方法是这样的:

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

不幸的是,这不会帮助我,因为我需要的是使用边界框更准确......多边形可以是奇怪的形状(例如L形),边界框不能处理这些情况。不管怎样,谢谢你! –

+2

它是准确的。边界框用于优化以减少在两个多边形内进行测试的像素数量。从技术上讲,你可以对图像中的每个“x”和每个“y”进行操作,并且它会产生相同的结果。 –

+0

该解决方案将非常缓慢。 – nn0p

1

你可以找到交集多边形问心无愧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

5

绘制形状与CV_FILLED在两个图像和与他们。面积为:CountNonZero(bitwise_and(ShapeAImage,ShapeBImage))