OpenCV:简单计算曲线弧度 您所在的位置:网站首页 origin求曲率 OpenCV:简单计算曲线弧度

OpenCV:简单计算曲线弧度

2024-03-10 22:40| 来源: 网络整理| 查看: 265

在判断曲线拟合度时候,需要进行曲线曲率计算。本文中使用根据弦的方法计算曲线弧度半径,得到曲率。

首先判定是否为弧:

简单判定:不要选取较多的点,若线段不是偏向一个方向,则不为弧

bool isArcCurve( std::vector &curve ) { bool isArc = false; cv::Point ps, pe,vec; ps = cv::Point(curve[0]); pe = cv::Point(curve[curve.size() - 1]); double angle0 = colorWish::arccos(ps, pe); std::vector rls;//左侧还是右侧 for (int i = 1; i < curve.size() - 1; ++i) { double angle1 = colorWish::arccos( ps, curve[i] ); rls.push_back( angle1 ); } //若出现一次反转,则判定为否,以此保证曲线的单方向 std::vector rlbs; for ( int i = 0; i < rls.size() ; ++i ) { bool isRight = false; if ( rls[i]>angle0 ){ isRight = true; } else{ isRight = false; } rlbs.push_back( isRight ); } //若出现一次反转,则判定为否,以此保证曲线的单方向 bool isSinVec = false; bool isRight = false; if ( rlbs.size()>0 ){ isRight = rlbs[0]; for (int i = 1; i < rlbs.size(); ++i){ if ( isRight!= rlbs[i]){ isSinVec = true; } } }else{ } isArc = isSinVec; return isArc; } double colorWish::dis2(double x1, double y1, double x2, double y2) { return (x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1); } // 计算两点的坐标夹角,360度余弦值 double colorWish::arccos(double x0, double y0, double x1, double y1) { double angle = 0; double l = dis2(x0, y0, x1, y1); l = sqrt(l); if (y1 - y0 > 0) { angle = acos((x1 - x0) / l); } else { angle = 3.141592653 + 3.141592653 - acos((x1 - x0) / l); } //std::cout


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有