opencvsharp求取两个Subdiv2D重合的面积
时间: 2023-08-24 07:28:52 浏览: 168
要求取两个Subdiv2D对象重合的面积,可以使用OpenCvSharp中的Subdiv2D.Intersect()方法。该方法可以求取两个三角形的交集。
具体来说,可以先构建两个Subdiv2D对象,然后将它们分别细分成更小的三角形,并对所有三角形进行遍历,找到在两个Subdiv2D中都存在的三角形,然后计算它们的交集面积。
以下是一个示例代码:
```
using OpenCvSharp;
// 创建两个点集
var points1 = new Point2f[]
{
new Point2f(10, 10),
new Point2f(100, 10),
new Point2f(10, 100),
new Point2f(100, 100)
};
var points2 = new Point2f[]
{
new Point2f(50, 50),
new Point2f(150, 50),
new Point2f(50, 150),
new Point2f(150, 150)
};
// 创建两个Subdiv2D对象
var subdiv1 = new Subdiv2D();
var subdiv2 = new Subdiv2D();
// 将点集中的点插入到Subdiv2D中
foreach (var point in points1)
{
subdiv1.Insert(point);
}
foreach (var point in points2)
{
subdiv2.Insert(point);
}
// 获取两个Subdiv2D对象中的所有三角形
var triangles1 = subdiv1.GetTriangleList();
var triangles2 = subdiv2.GetTriangleList();
double totalArea = 0;
// 遍历两个Subdiv2D对象中的所有三角形
foreach (var triangle1 in triangles1)
{
foreach (var triangle2 in triangles2)
{
// 判断两个三角形是否有交集
if (subdiv1.Intersect(triangle1.ToArray(), subdiv2, triangle2.ToArray()))
{
// 计算交集面积,并累加到总面积中
var intersection = subdiv1.GetTriangleIntersection(triangle1.ToArray(), triangle2.ToArray());
totalArea += Cv2.ContourArea(intersection);
}
}
}
Console.WriteLine("重合面积为:" + totalArea);
```
以上代码将创建两个点集,然后将它们分别插入到两个Subdiv2D对象中,并对所有三角形进行遍历,找到在两个Subdiv2D中都存在的三角形,然后计算它们的交集面积,并将所有交集面积累加到总面积中。最后输出重合面积。
阅读全文