opencv Subdiv2D.insert() 报错

terminate called after throwing an instance of 'cv::Exception'

what(): OpenCV(4.1.0-pre) /home/ni/opencv/modules/imgproc/src/subdivision2d.cpp:288: error: (-211:One of arguments' values is out of range) in function 'locate'

出错的代码:

cv::Point p;
cv::Rect rect;

//...

cv::Subdiv2D subdiv(rect);
subdiv.insert(p);

可以去看源码,opencv/modules/imgproc/src/subdivision2d.cpp,line 417 insert()函数里调用了locate()函数,line 287 locate()函数里列出了报错的条件

出错的原因是p可能不在rect内(或者边界超出),加个判断:

cv::Point p;
cv::Rect rect;

//...

cv::Subdiv2D subdiv(rect);
if(p.x >= rect.x && p].y >= rect.y && p.x < rect.x + rect.width 
    && p.y < rect.y + rect.height)
{
    subdiv.insert(p);
}

 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要求取两个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中都存在的三角形,然后计算它们的交集面积,并将所有交集面积累加到总面积中。最后输出重合面积。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值